高频考点

基础
HashMap和HashTable的区别
(数据结构,安全性,所属类,存储值的区别)

数组结构和链表结构区别,
https://blog.csdn.net/Islandw...

cookie 和 session区别

用到加锁(sycronized)的地方

做了哪些预防网络攻击的
cc攻击
Xss攻击
Ddos攻击

跨域问题
(浏览器同源策略限制,协议+域名+端口,解决: NG,cors)

三方登录
订单库存系统()

多线程有关配置
(最大线程数maxPoolSize,核心线程数corePoolSize,keepLive, waiteTime,queueCapacity…)
【任务性质:
计算密集型:线程数>=cpu核数
IO密集型:设置较大

【cpu利用率
cpu使用率:

      top 按H,查看us, sy, ni;
      sar -u 1 5: 每秒采集一次,共5次;

cpu负载:

     正在执行的线程和等待执行的线程之和
     线程状态: 
         1,新建new
         2,可运行runable,调用t.start()变为running状态
         3,运行running,runable状态的线程获取cpu的时间片timeslice,执行代码
         4,阻塞blocked,调用wait(),sleep(),yield()…
         5,死亡dead

HashMap底层

1,单例 https://my.oschina.net/dyyweb...
2,集合
3,Sql优化

【1,Explain 查看执行计划,rows,key,索引是否用到
【2,避免使用 != ,放弃索引进行全表扫描
【3,in 和 not in 也可能全表扫描,
【4,连续的值用between,不用in
【5,返回给前台的数据,要什么给什么,不要全给
【6,避免使用or,如果一个字段有索引一个没有,导致放弃索引
【7,查询靠后的分页,使用id < 9000,limit 10

4,Jvm内存模型,内存结构,及调优
【内存模型Jmm,屏蔽硬件和操作系统的访问差异,主要解决多线程通过共享内存进行通讯时,存在本地内存不一致、编译器对指令重排序、处理器执行乱序的问题,保证了并发场景中的原子性、可见性和有序性

【线程私有: 栈,程序计数器,本地方法栈

 线程共享: 堆, 方法区,堆外内存(永久代,代码缓存)

【程序计数器: pc寄存器,行号指示器,用来存储指向下一条指令的地址

【Java虚拟机栈: 主管Java程序运行,保存局部变量及部分结果,方法执行,入栈(进栈和压栈),方法结束,出栈; 内存大小为动态或固定,固定大小时,线程请求分配的栈容量超过最大,则抛StockOverflowError; 内存大小为动态时,新线程没有足够内存创建栈,则抛OutOfMemoryError,可以修改-Xss调整最大栈空间

【堆: 存储对象实例,数据

【内存调优:
堆: -Xmx 堆内存空间

   -Xms  初始化堆内存空间

伊甸区: -XX:UseTLAB 开启TLAB空间(默认占伊甸区1%),可以XX:TLABWasteTargetPercent设置TLAB占用空间

【垃圾回收:
年轻代: 对象创建的地方,没有被GC回收的进入老年代
老年代: 主GC,在内存满时执行,大对象直接进入老年代,避免年轻代中伊甸区和幸存区大量内存拷贝
元空间: 方法区
伸缩区: 动态调整内存空间(应该将伸缩区调整到0)

-Xms初始占用物理内存空间1/64
-Xmx初始占用1/4
可通过命令jconsole调出可视化jvm内存监控

建议直接将-Xms和-Xmx设置为一样

5,事务的特性和隔离级别
【原子性,要么全部成功,要么全部失败
【一致性,事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏
【隔离性,
【持久性,

6,Linux常用命令
【】

7,spring IOC 和 AOP的理解
【】

8,网络协议

============================

RabbitMQ
1,如何确保生产者不丢数据
【发送方确认模式: 将信道channel设置成confirm模式
【connection.confirmSelect()
生产者每发送一条就等待broker确认:
【channel.waitForConfirms()
批量:
【waitForConfirmsOrDie()

2,如何确保队列不丢数据
queueDeclare第二个参数durable设置为true,持久化队列

3,如何确保消费者不丢数据
接收方确认机制
拉取消息: channel.basicGet(queue, false); --false表示手动确认
推送消息: channel.basicConsumer(queue, false,consumer);

【deliveryTag:
【mutiple: true表示一次性ack所有小于tag的消息
【requeue: 被拒绝的是否重新入队列
【告诉服务器已经收到,可以在队列中删除: 【 channel.basicAck(long deliveryTag, boolean mutiple) 】
【拒绝或重新入队列:
【 channel.basicNack(long deliveryTag, boolean mutiple,bolean requeue) 】

4,如何保证消息不会被重复消费
幂等性: 已发送的消息设置id,消费时判断redis中是否存在此id

5,交换器类型:
【fanout 广播, direct 路由, topic 订阅】
topic模式在进行绑定时,要提供一个该对接关心的主题,# 表示0个或若干个关键字, 表示一个关键字,log.能与log.warn匹配,不能与log.warn.time匹配,而log.#能与两者匹配

6,怎么设置自动重发

============================

Redis
【数据结构:
String
Hash
List
Set
Zset

【持久化:
RDB(默认)、AOF

============================

Redis
【数据结构:
String
Hash
List
Set
Zset

【持久化:
RDB(默认)、AOF

============================

Zookeeper

============================

Oracle

============================

Mybatis

============================

Eleatiesjob

============================

Spring的定时任务

============================

Websocket

你可能感兴趣的:(java)