针不辍!撸串哈啤酒儿看比赛针不辍!!
京东打的好啊!加油加油!
算法题:
1.两数相加(力扣每日一题):主体循环不难,主要是几个边界情况,当一个链表遍历结束后,需要转为只加一个链表,两个链表都遍历结束后还有最后一位要判断carry是否还大于0,如果大于0需要额外新建一个节点;
2.LCS问题(最长公共子串):2.动态规划入门题?有点晦涩难懂,尽量理解了一下;主要是维护一个dp table,dp[i][j]表示的是t1的0到i和t2的0到j的最长公共子串,最终结果就是dp[l1][l2];
3.最长递增子序列的长度:有一种做法是将序列A排序,求排序后的序列B 和序列A的最长公共子串;
4.最长递增子序列(要求返回序列,如果有多个序列则返回字典序最小的那个):做到这就已经做晕了,好难,有没有大佬有好的动态规划的教学视频推荐啊~~~
5.多线程打印数字(双线程、三线程):这个笔试做过,面经也看过,可以通过加锁,也可以通过设置flag变量来控制,内容也不少,下次还要再看看
面试题:
1.Java引用:强引用、软引用、弱引用和虚引用
2.ArrayList和linkedlist底层和扩容
3.ThreadLocal内存泄漏(又看到一次,这次算是理解的差不多了):ThreadLocal是为线程提供独有的局部变量来实现变量的线程安全;
具体的内部实现是内部维护了一个map,当我们新建一个ThreadLocal变量的时候,key是一个指向ThreadLocal变量的弱引用,而value就是这个ThreadLocal的具体值;每设置一个ThreadLocal变量,map里就多一对键值对;
具体的内部实现是内部维护了一个map,当我们新建一个ThreadLocal变量的时候,key是一个指向ThreadLocal变量的弱引用,而value就是这个ThreadLocal的具体值;每设置一个ThreadLocal变量,map里就多一对键值对;
内存泄露相关:
3.1为什么key使用弱引用:如果使用的是强引用,那么当对这个ThreadLocal的强引用被回收之后,内部的map还吃有了一个key对这个ThreadLocal的强引用,导致这个变量不会被回收,就会导致内存泄漏;
3.2 就算key使用了弱引用之后,这个ThreadLocal对象可以正常的被回收了,但是map中对应的value的内存泄漏依然存在,且key被删除之后变成了NULL,value更无法被访问到,所以ThreadLocalMap类中设置了方法在每次get/set/removeThreadLocalMap中的值的时候都会自动清理key为null的value;
3.3 如果value使用弱引用,那每次gc过后value就不存在了,初始的功能实现就被破坏了(这时候访问KEY会调用初始化方法取得这个Value的初始值);
3.2 就算key使用了弱引用之后,这个ThreadLocal对象可以正常的被回收了,但是map中对应的value的内存泄漏依然存在,且key被删除之后变成了NULL,value更无法被访问到,所以ThreadLocalMap类中设置了方法在每次get/set/removeThreadLocalMap中的值的时候都会自动清理key为null的value;
3.3 如果value使用弱引用,那每次gc过后value就不存在了,初始的功能实现就被破坏了(这时候访问KEY会调用初始化方法取得这个Value的初始值);
4.线程状态转换图
5.JVM三大调优参数:-Xms和-Xmx是对堆的性能调优参数;-Xss是对线程栈的性能调优参数
6.GC基石算法:标记-清除、标记-复制、标记-整理
7.Spring全家系列(最近都是java se基础啊数据库啥的,今天好好看了一波Spring):
Spring是什么: Spring是一个轻量级的IoC和AOP容器框架;
Spring的优点;
AOP和IOC的理解
Bean的生命周期(前置的servlet的生命周期):实例化-依赖注入-处理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware)-BeanPostProcessor-InitializingBean 与 init-method-DisposableBean-destroy-method;
Bean的作用域:singleton、prototype、request、session、global-session
Spring如何处理线程并发问题:ThreadLocal
Spring基于xml注入bean的几种方式:setter注入、构造器注入、静态工厂、实力工厂;
自动装配的方式:byName、byType、constructor、autodetect(有构造方法用构造方法,没有则用byType)
Spring 框架中都用到了哪些设计模式:工厂模式(BeanFactory)、单例模式(Bean默认为单例模式)、代理模式(AOP)
Spring 框架中都用到了哪些设计模式:工厂模式(BeanFactory)、单例模式(Bean默认为单例模式)、代理模式(AOP)
8.ArrayList和HashMap的线程安全问题:
HM: JDK1.7之前,在扩容操作时,由于使用了头插法,可能会造成环形数据链或者丢失数据
JDK1.8中多线程下PUT数据可能会发生数据覆盖的情况
AL: 因为原size=1, 但是因为线程1与线程2都将值赋值给了element[1],导致了element[2]内没有值,被跳过了.指针index指向了3.所以,导致了某些情况下值为null的情况
JDK1.8中多线程下PUT数据可能会发生数据覆盖的情况
AL: 因为原size=1, 但是因为线程1与线程2都将值赋值给了element[1],导致了element[2]内没有值,被跳过了.指针index指向了3.所以,导致了某些情况下值为null的情况
因为线程上文判断了数组没有越界.所以进行赋值操作,下一个线程进行了size++,此时的size=3了.再执行element[3]=2. 导致了数组越界了.
9.共享锁、排它锁、更新锁:
共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。
10.Update语句的加锁过程: 当update 语句的where条件涉及列是非索引列时,MSSQL查询引擎会执行全表扫描,在这个过程中会对每一行加上U锁,如果该行是目标行,那么U锁会升级成X锁,然后进行更新操作,而非目标行的U锁会在数据读取完后马上释放当然如果语句B中的where 条件使用的是索引列,那么语句B只会在索引涉及的列上加U锁,如果A,B更新查询的影响行无交集那么A,B查询互不影响;
晚上图书馆喂蚊子,真不错,图书馆全都是考研的同学,好像就我一个找工作的孤孤独独
全部评论
(1) 回帖