面试知识点整理
计算机网络
1.TCP为何连接3次,挥手4次
-
syn是同步序列号的作用,两次的话,只有一方可以同步
linux
-
netstat -anp |grep 端口号
- https://jingyan.baidu.com/article/c910274bb7245acd361d2d3f.html
2.du -h, df -h查看磁盘使用情况;ps查看进程的使用情况
Mysql
1.mysql千万级大表的优化:https://www.zhihu.com/question/19719997/answer/549041957
2.sql语句的关键字的顺序
where group by having order by limit 。
Redis
1.redis的集群机制:https://blog.csdn.net/miss1181248983/article/details/90056960
Java基础
1.Java创建对象过程详解
https://baijiahao.baidu.com/s?id=1637836912223474691&wfr=spider&for=pc
2.异常的理解
https://blog.csdn.net/sugar_no1/article/details/88593255
运行时异常也可以被捕获,但是不推荐
3.接口中的属性、方法的默认修饰符
https://blog.csdn.net/qq_33271461/article/details/84988858
- 属性:public static final
- 方法:public abstract
4.注解的理解
https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html

5.String被声明成不可变的原因?
https://www.cnblogs.com/wkfvawl/p/11693260.html
-
缓存Hash值
-
常量池的需要,一旦一个字符串常量被创建了,那么后续的该字符串都会引用常量池中的对象,而不会新建。只有 String 是不可变的,才可能使用String Pool。
-
线程安全
-
在并发场景下,多个线程同时读一个资源,是安全的,不会引发竞争,但对资源进行写操作时是不安全的,不可变对象不能被写,所以保证了多线程的安全
-
网络连接参数安全性
-
在网络连接和数据库连接中字符串常常作为参数,例如,网络连接地址URL,文件路径path,反射机制所需要的String参数。其不可变性可以保证连接的安全性。如果字符串是可变的,黑客就有可能改变字符串指向对象的值,那么会引起很严重的安全问题。
-
7.访问控制修饰符

8.动态代理和静态代理的区别?
https://blog.csdn.net/zpf336/article/details/82751925
JVM
1.方法区与永久代的区别?
https://www.jianshu.com/p/66e4e64ff278
方法区和永久代的关系很像Java中接口和类的关系,类实现了接口,而永久代就是HotSpot虚拟机对虚拟机规范中方法区的一种实现方式。
元空间也是方法区的一种实现方式,将方法区的内存与堆内存分开了,不会影响gc的过程,因为方法区的内存的大小总是不定的。
并发
1.线程之间怎么传递数据?
-
1) SynchronousQueue 同步队列
-
2) Exchanger 工具类实现线程间的数据交换
-
核心线程数、最大线程数、组赛队列、抛弃策略
-
shutdown,停止接受线程,但是还会继续消费队列里的线程
-
stop停止接收线程,并且尝试停止所有的正在运行的线程
-
excute与submit https://blog.csdn.net/mryang125/article/details/81879096
-
1)execute和submit都属于线程池的方法,execute只能提交Runnable类型的任务,而submit既能提交Runnable类型任务也能提交Callable类型任务。
-
2)execute会直接抛出任务执行时的异常,submit会吃掉异常,可通过Future的get方法将任务执行时的异常重新抛出。
线程池参数设置的具体考量:https://www.cnblogs.com/superming/p/12887552.html
3.线程调度和进程调度
https://www.cnblogs.com/HuiH/p/11918006.html
4.阻塞队列是如何阻塞的?
https://www.cnblogs.com/it-science/p/5721104.html
-
LinkedBlockingQueue添加元素时有一个构造节点的时间,为了尽量减少这部分时间占比,使用一个读锁一个写锁可以实现并发存取的优化。而ArrayBlockingQueue在添加元素时不需要开辟空间等等(创建时指定数组大小),所以反而是加锁解锁时间占比较大,如果继续使用这种读写锁分离的设计,增加的时间损耗大于并发读写带来的收益。
智力题
1.100层楼扔鸡蛋,找出鸡蛋碎掉的临界楼层,最少需要多少次?
https://www.seotest.cn/jishu/27971.html
SSM
1.spring的事务失效场景
https://blog.csdn.net/m0_37701381/article/details/85066711
-
1)事务方法的嵌套调用:在一个Service类的内部,事务方法之间的嵌套调用,普通方法和事务方法之间的嵌套调用,都不会开启新的事务.是因为spring采用动态代理机制来实现事务控制,而动态代理最终都是要调用原始对象的,而原始对象在去调用方法时,是不会再触发代理了!
-
只有来自外部的方法调用才会呗AOP代理捕捉,类内部方法调用类内部的其他方法,子方法并会不引起事务行为,即使被调用的方法上使用有@Transactional注解。
-
2)@Transactional注解应该只被应用到public方法上,不要用在protected、private等方法上,即使用了也将被忽略,不起作用。这是由Spring AOP决定的。
-
3) 主方法名上有@Transactional注解,方法体内不能用try catch;如果用try catch,则catch中必须用throw new Exception();
-
不抛出异常的话,spring的事务是无法回滚的

浙公网安备 33010602011771号