1.equals 方法本质就是 ==。引用对象不重写equals方法就是比较地址值
2.String 不是基础类型
3.java 中的 Math.round():正数网上取整,负数舍弃
4.字符串反转:StringBuilder /StringBuffre的reverse()方法
5.字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
6.Integer的值在-128—127之间,直接到常量池获取不用创建新对象
7.创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。
8.Object.wait()方法使用在同步锁当中
9.synchronized 和java.util.concurrent.locks.Lock的异同:
1.Lock 能完成synchronized所实现的所有功能
2.synchronized会自动释放锁,lock需要开发人员收到释放
并且最好在finally 块中释放
3.synchronized底层是利用了原生的c/c++实现,不可控。lock是纯java实现的锁机制
AQS底层:三大核心->自旋、LockSupport、CAS
AQS具备特征:
·阻塞等待队列
·共享/独占
·公平/非公平
·可重入
·允许中断
CLH队列:没有拿到锁的线程由自旋变成阻塞
FIFO:先进先出
参考:https://zhuanlan.zhihu.com/p/60884042
10.所谓设计模式,就是一套被反复使用的代码设计经验的总结
11.单例饿汉式可以避免并发出现多个实例问题,线程安全
12.springcloud的五大常用组件:zuul网关,Eureka 注册中心,Ribbon 客户端负载均衡,Hystrix熔断机制,springcloud Config分布式配置
13.mysql的Explain使用了解参数含义
查询优化:
1.in 和 exist用法场景区分:数据集大的in数据集小的,反之用exist
2.order by字段 尽量使用索引,mysql排序使用index和filesort两种方式
锁机制:
分类:按操作分为 读锁(共享锁) 写锁(排他锁)
按操作颗粒度分为:
表锁 偏向MyISAM存储引擎,开销小,加速块;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行锁 ·偏向InnoDB存储引擎,开销大,加锁慢;会出现思索;锁定力度最小,发生锁冲突的概率最低,并发度也最高。
·表中没有索引就升级为表锁
间隙锁(GAP):(不建议使用)当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;
14.线程的t.join()方法:只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。
15.slee()/wait()方法区别:·sleep()属于Thread类中的,wait()属于Object类中
·sleep()方法过程中不会释放对象锁/wait()会释放对象锁进入等待池中
16.普通的单核cpu(不支持超线程)同一时刻只能执行一个线程
时间片:cpu执行划分很多时间片段给不同的线程
17. ·偏向锁:偏向锁的目的是在某个线程获得锁之后,消除这个线程锁重入(CAS)的开销,看起来让这个线程得到了偏护
·轻量级锁:轻量级锁所适应的场景是线程交替执行同步块的情况,如果存在同一时间访问同一锁的情况,就会导致轻量级锁膨胀为重量级锁。
·重量级锁:这种依赖于操作系统 Mutex Lock 所实现的锁我们称之为“重量级锁”。 需要将用户态转换为内核态(开销较大)
18.CyclicBarrier(回环栅栏)可以实现让一组线程等待至某个状态之后再全部同时执行
CyclicBarrier 中最重要的方法就是 await()/await(long timeout, TimeUnit unit)
19.四大元注解:@Target指定使用范围、@Retention 存活时间、@Documented将被javadoc编译成文档、@Inherited可以集成父类注解
20.为什么需要将对象序列化?--1.将对象持久化到硬盘,例如:session 2.对象远程传输
serialVersionUID的作用?--保证反序列化不会出错(如果没有生成serialVersionUID,Serializable会自动根据class的属性生成serialVersionUID,但是如果传输过程对象发生变化会报错:InvalidClassException)
21.mybatis缓存:·一级缓存默认开启不可关闭,作用在同一个sqlSession(底层一个Map维护)
·二级缓存需要开启全局配置中启动,select中开启需要cache的节点(底层Map维护)
如果两次操作中间出现commit操作cache清空
22.tcp/ip协议 采用四层结构模型:应用层、传输层、网络层、链路层
网络通信就好比送快递,商品外面的一层层包裹就是各种协议,协议包含了商品信息、收货地址、收件人、联系方式等,然后还需要配送车、配送站、快递员,商品才能最终到达用户手中。
配送车就是物理介质,配送站就是网关, 快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址。
链路层:对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。
组成:首部、数据和尾部三部分组成
首部固定为14个字节,包含了目标MAC地址、源MAC地址和类型
数据太大需要分为多帧发送
尾部固定为4个字节,表示数据帧校验序列,用于确定数据包在传输过程中是否损坏
网络层:定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由
包含协议:IP协议、ARP协议、路由协议
组成:首部和数据两部分组成
首部:长度为20个字节,主要包含了目标IP地址和源IP地址,目标IP地址是网关路由的线索和依据
传输层:定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性
包含协议:UDP协议(没有确认机制,数据不保证安全)/tcp协议(有确认机制的UDP协议)
组成:首部和数据
首部:首部长度为8个字节,主要包括源端口和目标端口
tcp协议:三次握手,四次挥手
应用层:定义数据格式并按照对应的格式解读数据
包含协议: HTTP、FTP、SMTP 等
总结:
当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。
网友评论