美文网首页
java基础随笔

java基础随笔

作者: 伊泽_b394 | 来源:发表于2020-04-10 09:34 被阅读0次

    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地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。

    相关文章

      网友评论

          本文标题:java基础随笔

          本文链接:https://www.haomeiwen.com/subject/omhuuftx.html