自测1.0

作者: hekirakuno | 来源:发表于2020-02-13 11:29 被阅读0次

1、线程的状态
线程状态分6种:new,runnable,blocking,waiting,timed_waiting,terminaled
2、进程与线程的区别
进程是一段被加载进内存的序列,运行中的程序,拥有资源。是操作系统调度的基本单位。
线程是进程的一段子序列,不拥有资源,但共享进程的资源。是可以单独执行的基本单位。
3、进程间通讯,线程间通讯
ipc:信号量,互斥量,消息队列,socket,stream等
线程间通信:共享变量volatile,消息传递:synchronized,ReentrantLock,Object.wait/notify/notifyall,condition.await/signal,Thread.sleep/yield,LockSupport.park/unpark

4、HashMap数据结构,如何实现,与HashTable,ConcurrentHashMap的区别
HashMap:数据结构是数据+链表+红黑树
初始容量16
红黑树8
链表6
加载因子0.75f
阈值=加载因子*容量
实际大小
modcount(检查结构改变)快速失败
put的时候hashcode+高位运算+取模运算,找到下标之后,如果位置为空,直接插入,如果hash碰撞,那么延长到链表后面。如果发现key相等,那么替换value。如果链表长度大于8用红黑树转换,如果长度小于6转换回链表。
扩容的时候,会重新rehash到新的table上。rehash完成后,替换旧的hashmap。与1.7不同,因为是尾插法,且高位运算提供了更好的hash算法,所以新的rehash出的值,只有高位一个比特位不同,如果是0就插入到之前的位置,如果是1就插入到之前的位置+之前table长度。并且链表顺序不会更改。1.7顺序会更改,因为是头插。并且可以避免loop环。
HashTable:继承dictionary而不是abstractMap
在类加载的时候会用。ClassLoader类里面。redis内部扩容结构。
但是效率不好所以最好换currentHashMap
ConcurrentHashMap:数据结构和HashMap一样
但是它使用了CAS+synchronized保障了线程安全。sizeCtl相当于threshold+modCount保障线程安全。
put时,两种情况。第一种是当前index位没有元素,那么直接放上去。第二种是,如果当前index上有元素,那么会锁住头结点,保证一条链表只能同时被一个线程操作。
扩容,也算是两种情况,初始化table/扩容。
初始化table是个懒加载,第一次put时初始化table。当sizeCtl等于-1的时候,说明已经有某一线程在执行hash表的初始化了,一个小于-1的值表示某一线程正在对hash表执行resize。这样保障了安全。(这个new Node[]的时候,还用了双重检查)
5、Cookie与Session的区别
他们的目的是让http具有状态。
cookie是本地客户端的解决方案,session服务器的解决方案。
cookie根据域名在本地保存一个文件夹里面储存用户名密码,sessionid之类的。
session是每个服务器对于我的登录会话给一个sessionid,作为通行证。两者结合就是传统的状态保留策略。
6、索引有什么用,如何建立索引
索引,其实就是引入目录。想象一下新华字典。如果没有拼音索引或者部首索引,我们其实很难进行汉字查询。
7、ArrayList如何实现,与LinkedList的区别?如何扩容。
arrayList数组实现。默认大小是10。是一个动态数组。扩容1.5+1。
linkedList双向链表。可以实现栈,队列等等数据结构。
8、equals方法的实现
先判断是否是当前对象,再判断是否是null,再判断类的类型,再判断内容。
同时要重写hashcode。因为在hashmap等操作中,需要根据hashcode判断下标位。
hashcode相等不一定equal,但是equal一定hashcode相等,这个是原则。
9、面向对象
OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。
10、线程状态,BLOCKED和WAITING的区别
BLOCKED:处于受阻塞,正在等待获得监视器锁的线程状态,以便进入同步代码块/方法。或者调用Object.wait之后再次进入同步代码块/方法。
WAITING:无限期地等待另一个线程来执行某一特定操作的线程的状态。(比如object.wait等待object.notify或者notifyall,又比如线程调用了Thread.join方法需要等待指定的线程执行完毕)

  • <li>{@link Object#wait() Object.wait} with no timeout</li>
  • <li>{@link #join() Thread.join} with no timeout</li>
  • <li>{@link LockSupport#park() LockSupport.park}</li>
    11、JVM如何加载字节码文件
    ==类是如何加载的?类加载机制
    首先加载的时机:new getstatic putstatic invokestatic方法
    加载的过程:加载--链接--初始化--(使用--卸载)
    加载就是加载到内存里来,链接分为三步,验证,准备,解析。验证就是验证字节码的规范,准备就是分配内存,设置类变量初始值等类的数据结构准备,解析就是转换符号引用变成直接引用,符合语法规范。初始化是真正执行代码的过程。父类静态->子类静态->父类非静态->子类非静态
    加载的注意点:
    12、JVM GC,GC算法
    可达性分析(不使用引用计数,因为可能造成互相引用)
    和 GC Roots 直接或间接关联的对象是有效对象,反之则是无效对象。
    我们要回收的就是不用的,什么是不用的,就是线程已经走完,或者类已经卸载的。
    也就是线程栈帧中涉及的引用对象和类静态变量/常量引用的对象。
    回收时机
    一般来说,回收是做标记清除/整理/复制
    finalize()方法是一个缓刑机制,对于覆盖了它的方法,都是被标记后放进一个队列中,如果再清除队列的时候它还在里面那就被清除,如果在这期间被使用了,那就相当于重生,就不清除了。一个对象只能调用一次这个方法,第二次调用就是无效的,会直接干掉。
    标记清除:内存碎片
    复制:新生代算法(minor GC)。eden survivor1/2 8:1:1 每次使用eden和survivor中的一个作为分配对象的区域,清除后全部存活对象转移到另一半。这样不会浪费。
    内存占用
    标记整理:清理完之后会规整一下。
    jvm参数

13、什么情况下会出现Full GC,什么情况下出现Young GC
full gc:System.gc(),老年代内存不足,永久代内存不足
young gc:当Eden区满时,触发Minor GC。
14、JVM内存模型

内存模型

15、java的运行时数据区

运行时数据区

16、事务的实现原理

事务的原子性是通过 undo log 来实现的(反操作)
事务的持久性是通过 redo log 来实现的(写操作是一段时间从缓存写一次,redo log是每次都会写一次,并且量少)
事务的隔离性是通过 (读写锁+MVCC)来实现的
而事务的终极大 boss 一致性是通过原子性,持久性,隔离性来实现的!!!

log操作先于磁盘持久化,保障了一定可以回滚成功。

Mysql 隔离级别有以下四种(级别由低到高):
READ UNCOMMITED (未提交读)【写加锁,读写并行,脏读】
READ COMMITED (提交读)【写加锁+mvcc,读生成多个版本号。读写分离机制,不可重复读】
REPEATABLE READ (可重复读)【读写锁/写加锁+mvcc。读只生成一个版本号】
SERIALIZABLE (序列化)【全是排它锁,不会有并发问题,就是效率太差】
参考资料:
事务实现原理

相关文章

  • 自测1.0

    1、线程的状态线程状态分6种:new,runnable,blocking,waiting,timed_waitin...

  • 如何交付高质量的软件产品

    1、自测、自测、自测,必不可少。

  • 作文

    ##自测

  • 内部制度(有问题随时沟通完善)

    1. 关于自测 1.1 所有重点功能需要加强自测 1.2 自测时间由研发人员自行申请 1.3 若明显问...

  • 自测

    功能点覆盖测试 删除应用测试删除应用重新安装,断网下测试全功能删除应用重新安装,弱网测试全功能 覆盖安装测试全功能...

  • 自测

    果然,写作文还是需要有作文神器的。 就比如批改网里面的VIP,如果不是老师自己要求的题目,自测里面的批改是需要mo...

  • 自测

    测试一下你是否正能量爆棚只需要问自己两个问题: 1.你能坚信自己好的一面吗?即使是非常沮丧的时候? 2.你能看到他...

  • 自测

    黑夜,总是给人太多的思考,顾不上的思虑,也总把你围得水泄不通,玩笑似乎更加大声,更加无所禁忌,也更加撕心裂肺。把热...

  • 自测

    呆在家里,最重要的任务是等待做核酸,七点多的时候,终于上门了,做完之后总算放下了一桩心事。 老妈闲不住,开始收拾厨...

  • 自测

    前一天晚上晚自习我是第二节有课,第一节时做准备想看看题,结果看不进心也看不懂,瞌睡、烦闷,睡了一觉第二节才正常上课...

网友评论

      本文标题:自测1.0

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