`

问题总结

 
阅读更多
https://572327713.iteye.com/admin/blogs/2389759
https://572327713.iteye.com/admin/blogs/2407978

ThreadPoolExecutor 7个参数作用 newCachedThreadPool特点,使用场景;
https://572327713.iteye.com/admin/blogs/2427908
核心线程数:默认开启线程数
最大线程数:最多开启线程数
超时时间:当启动的线程数大于核心线程数时,如果某个线程空闲超过超时时间时,进行关闭。
时间单位:
队列属性:如无界有界阻塞队列等
执行策略:线程满时,提交线程采取的策略
线程工厂:生产线程

永久区,然后1.8做了什么改进
永久区在1.8后移除了,同时增加了元区,存储的位置发生变化(元空间不在虚拟机中,在本地内存)。

hashmap冲突get 1.8
在同一个槽点,链表超过8个会转为红黑树。

spring ioc类相互依赖层级关系怎样实现 --不大明白,有没有好的博客?
就是Spring 原理里面涉及到的,需要了解工作原理,熟悉主要源码
https://www.cnblogs.com/ITtangtang/p/3978349.html

spring bean A依赖B B依赖A,spring如何解决的:
https://blog.csdn.net/bsg_24/article/details/84782382

spring AOP原理代理模式 proxy和cglib区别
JDK动态代理只能为接口创建动态代理实例,而不能对类创建动态代理。需要获得被目标类的接口信息(应用Java的反射技术),
生成一个实现了代理接口的动态代理类(字节码),再通过反射机制(运行时打开和检查.class文件)获得动态代理类的构造函数,利用构造函数生成动态代理类的实例对象,
在调用具体方法前调用invokeHandler方法来处理。

cglib是针对类来实现代理的,需要依赖asm包,他的原理是对指定的目标类生成一个子类(把被代理对象类的class文件加载进来,修改其字节码生成子类),
并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理

final修饰的实现类,jdk/cglib动态代理是否可以代理。
jdk动态代理可以,cglib代理不可以。
首先实现类,jdk近可以用于接口实现类的动态代理,而cglib是对类的动态代理,但是呢在spring,也可以设置cglib去代理实现类,那为什么final实现类不可以呢。final的类不能被继承了,jdk新生成的代理类原理是重新封装实现的接口,没继承那个final类,而cglib新生成的代理类是直接继承finale类作为子类,所以报错。

方法区会不会gc
会,方法区存放永久区

对方法区和永久区的理解,之间的关系
方法区:类的方法代码,常量,静态变量,方法名,访问权限,返回值
方法区是jvm标准中定义的一部分,永久区是hotspot实现方法区的方式,在hotspot中方法区等同永久区
永久带(实现)是对方法区(标准)的实现,是实现层面的东西

读写锁是怎样互斥的
读写相互独立

生产者消费者模型
https://blog.csdn.net/a491857321/article/details/79262996
空指针处理,java8引入了opional,写法要注意不能有以前的特性

spring 加载层级关系 是否加载到私有方法 能的话是通过反射

synchronized 实现原理,如何实现加锁的效果
monit enter 和monit exit 标记位加上计数器
jdk的锁是如何实现的呢
那是java类实现的,底层主要靠CAS 和 AQS
前者是关键字后者是具体的java类

非公平锁为什么比公平锁费时
对方法区和永久区的理解,之间的关系
ReadWriteRock 读写互斥吗
ReentrantLock 是可重入锁,什么是可重入锁
Semaphore拿到执行权的线程间互斥吗
写一个你认为最好的单例模式
各大排序算法
redis可以实现事务吗,怎样实现分布式锁
B树和B+树是解决什么样的问题的,怎样演化过来,之间区别
java的private类型可以通过反射访问,那么private的意义是什么
进程间通信的方式有哪些
写一个生产者消费者模型
既然Java反射可以访问和修改私有成员变量,那封装成private还有意义么?
https://www.zhihu.com/question/28161668/answer/518225224

枚举是如何保证线程安全的,为什么序列化和反序列化的操作中是单例的?
enum类型是线程安全的,static类型的属性会在类被加载之后被初始化,Java类的加载和初始化过程都是线程安全的。序列化和反序列化的操作中是单例的:序列化的时候Java仅仅是将枚举对象的name(name为普通对象,非枚举属性)属性(非value值)输出到结果中,反序列化的时候则是通过java.lang.Enum的valueOf方法来根据名字查找枚举对象。所以操作枚举中可变对象不影响序列化和反序列化的对象变化。

Integer a = 1;Integer b = 2;Long g = 3L;
System.out.println(g == (a+b));

jvm 317页
因为== 在进行算数运算时会进行拆箱,拆箱后 值是相等的
equals方法不处理数据转型关系


java的private类型可以通过反射访问,那么private的意义是什么
private主要抓住两点:1.java的private修饰符并不是为了安全性设计的;2.从外部对对象进行常规调用时,能够看到清晰的类结构。

1. dispatchservlet请求任务分发流程
2. String a = "ab";
   String b = "a" + "b";
   a == b 是false还是true
3. 怎样破坏双亲委派模型

4.常用设计模式,写一个策略模式

5.冒泡排序和快排选一个写一下

6. int i = 1;这是原子操作吗

7. volatile 问了很多,从java内存模型问到实际使用

8.写了各种变量,引用,new出对象,方法调用,问这些分别涉及到哪些jvm内存区域

9.Collection子类有哪些,Hashmap和ArrayList有继承上的交集吗

10.HashMap put的过程, HashTable原理, concurrentHashMap 怎样实现线程安全的
http://www.importnew.com/28263.html

11.数据结构 图有最小生成树,涉及哪两种算法

12.AOP IOC 原理

13.索引什么时候失效,索引原理

14.k-means聚类算法 有没有了解

15. 多线程在业务中使用场景,问到countdownlatch cyclicbarrier,线程池作用,几种线程池,区别,7个参数

16.synchronized实现的原理,问的很细,具体到要实现需要有哪些东西组成,计数器放哪里...
https://blog.csdn.net/javazejian/article/details/72828483

17.普通的for循环和foreach区别

18。java8 stream有什么优势

19.Optional作用,用来判空,这样回答,java涉及色初衷不想用户暴露内存,但是设计上有一点,需要判断空指针异常,这违背了java设计初衷,Optinal来判空弥补这一缺陷

20.问题1:判断如下代码片段在具体的业务场景下都有哪些潜在问题,StringUtils、Money内部实现可忽略。
/**
*  <pre>
*  金额分的转化 例如10000 会转化为 100.00
*  <code>
*  CentAmountFieldValueConverter.convert("10000") = 100.00
*  </code>
* </pre>
*/
public class CentAmountFieldValueConverter implements FieldValueConverter {

public void convert(Field field) {
String value = (String) field.getDestValue();if (StringUtils.isBlank(value)) {
return;       
}

try {
long cent = Long.parseLong(value); //value转化为Long型不能越界
Money amount = new Money(cent);
amount.setCent(cent);
field.setDestValue(amount.toString());
} catch (Exception e) {
field.setDestValue(value);
}
}
}

21.二叉树按照层级遍历
借助队列

22.String s = new String("abc");  
分别在哪些区域做了哪些工作

23.运行时异常和受检异常区别,各自在什么情况下使用,使用特点。
运行时异常runtimeException,包括空指针,数组越界,运行时异常都继承runtimeException,受检异常包括io异常,notfindclass异常,使用时需要加trycatch才能编译。

24.Linux内核 不同版本特点 ,springcloud,springboot 事务使用,可以放在类上吗,redis 分布式锁,红锁,redis 挂了怎么办,单例我写了双检锁,问为什么要这么写呢,这样不好,jvm各垃圾收集器,使用了什么算法,几个工具,jstat等,springboot 加载过程,docker,tomcat,redis 持久化方式,用什么语言实现的,怎样运行,放在怎样的数据结构里


25.二叉树怎样查找最近的父节点,二个数组怎样找出公共部分,翻转二叉树
https://572327713.iteye.com/admin/blogs/2405375

26.二分查找,快排,数组元素的平方排序,冒泡,树的层次遍历,股票最大收益

27.Bio和NIO实现原理,业务场景,futureTask底层,还有一些设计模式具体使用场景,还有threadlocal怎样使用,场景

28.线程池,多线程那块肯定是细问的,Tomcat启动后,配置文件改变有效吗

29.Jvm各大垃圾收集器,Minorgc和fullgc

30.MQ怎样保证高可用,消息丢失怎样处理,mysql怎样持久化,不同的引擎事务处理有什么区别
binlog和redolog

31.redis如何实现集群。同步还是异步
复制偏移量,复制缓冲区。相当于异步。

dubbo协议

为什么netty没有使用aio

nio异步

new 实例一定在堆上吗
栈:基本类型的变量和对象的引用变量

33.redis可以直接改list值吗
不能

34 dubbo用户调用消费者经过哪些
Dubbo完整的一次调用链路介绍
https://www.jianshu.com/p/4fedd4946009

35 执行计划器除了type有其他哪些

第二轮:
1.线程池最大数量的含义,和队列的关系,如果是无界队列,最大数量作用。
https://572327713.iteye.com/blog/2427908
2.有界队列的工作原理。
数组 +锁
https://572327713.iteye.com/blog/2427908

3.dubbo和cloud区别

4.zuul除了根据ip,还能通过什么调用服务,如何配置。

5.spring boot 特性,加载工作原理是
https://www.cnblogs.com/canmeng-cn/p/8531381.html
工作原理,进行对StringApplication对象实例化加载spring.factories配置,将配置文件的配置装入spring容器中。

6.hashmap为什么是2的n次幂
此问题要结合移位和%取余回答
原始jdk采用取模运算%可以更均匀的分配到槽位,取模%运算有个公式,等于移位后取与&,而这个移位就是2的n次幂,具体可以看看jdk1.8的扰动函数实现,他目的是1,更均匀的达到槽点,保证不过多的hash碰撞,2.在扩容时,可以保证有尽量多的元素不再进行新的槽位选择调整位置。

7.虚引用,弱引用,软引用,强引用
内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了
强引用:
new A() 只有置为null才能回收
软引用:
SoftReference<String> sr = new SoftReference<String>(new String("hello"));
内存不足的时候JVM才会回收该对象
弱引用:
WeakReference<String> sr = new WeakReference<String>(new String("hello"));
无论内存是否充足,都会回收被弱引用关联的对
虚引用:
虚引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动
ReferenceQueue<String> queue = new ReferenceQueue<String>();
        PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
// 永远为null(幽灵引用相当于无引用)
System.out.println(pr.get());
   虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。
引用队列:

引用队列可以配合软引用、弱引用及幽灵引用使用,当引用的对象将要被JVM回收时,会将其加入到引用队列中。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。

8.volitail为什么不能保证原子性

9.spring事务的原理 A调用B为什么不会开启事务
此题目需要具体分析,是类和类之间,是不是私有方法:
https://572327713.iteye.com/admin/blogs/2439612

10.索引如果 值如果是null 会失效吗
很多博客说会,根据执行计划器看并不会失效

11.可达性分析的根在哪
常量,静态对象,native对象,->可被引用的对象
如果没有被引用,说明不用了,回收掉。

12.线程池如果某个线程有异常,线程池如何处理的。
catch打日志,
借助第三方链路跟踪日志,
线程池自己异常策略,看ThreadPoolExecutor.java类runWorker(Worker w)方法的实现:内部也会catch住,也是一个钩子方法,将 task 和异常作为参数,留给需要的子类实现,线程池留给我们做自定义业务的方法afterExecute
线程池的扩展方法包括
beforeExecute() 线程执行前调用
afterExecute() 线程执行后调用
terminaerd() 线程退出时候调用
finally 会进行解锁,只结束当前任务,当前线程会继续使用接收任务。
https://www.cnblogs.com/trust-freedom/p/6681948.html#label_3_4

13.Threadlocal如何实现安全的,从主内存方向解答。

14.一致性哈希算法
https://www.cnblogs.com/lpfuture/p/5796398.html

15.mysql分页一页大小,为什么此大小,从磁盘线程扫描大小有关来回答。

16.局促索引用的b树,非局促用的b+树。

17.hashmap null存储哪里
先去第一个数组槽位查找,eques比对替换,如果没有插入数组0链表头。

18.事务a没有声明,事务b有声明,a调用b,b会有事务吗。
任务1不生效,a没有加,但是b有加为什么不生效。b那一块生效吗。
此题目需要具体分析,是类和类之间,是不是私有方法:
https://572327713.iteye.com/admin/blogs/2439612

19.mysql如何保证一致性,原子性。
从隔离性去保证,也是悲观锁和乐观锁的使用。

20.定时多机集群

21.延时消费mq能否实现,如何实现
https://blog.csdn.net/chengjieping/article/details/81067055

22.被fanel修饰的接口对应实现使用的是spring 哪种aop方式。能否用cglib
原理区别:
java动态代理是利用反射机制(获取class文件方法)生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理(生成class字节码,在类加载到jvm中使用)。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
https://www.cnblogs.com/zrtqsk/p/3600588.html
自己写个例子,java.lang.IllegalArgumentException: Cannot subclass final class,答案是不可以。

原生jdk动态代理和cglib是两种代理方式,都是动态代理,都是重新生成代理类的,为什么jdk动态代理可以,cglib代理不可以?
CGLib采用非常底层的字节码技术,可以为一个类(final)创建一个子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,并顺势植入横切逻辑。而final不能被继承。CGLib动态代理能代理类和接口,但是不能代理final类,也是有一定局限性。
jdk动态代理为接口创建代理实例,实现方法作为参数给目标类的接口使用。


23.jvm年轻代与老年代比例
默认1比2

24.本地缓存保存数据同步,服如何务之间如何通知,集群通知。
各个服务器订阅mq,一个专门更新主缓存到本地缓存的mq队列,
有更新数据来了,各个服务器都订阅修改自己本地缓存。
也就是修改主缓存,同时通知各个服务器的本地缓存。
2 如果是经常不改变的数据,本地缓存设置个失效时间,到了去主缓存拿一下 这样也可以实现数据更新

25.分库分表如何实现分页和排序。
实现不了,通过搜索引擎。

26.key的失效机制,redis的key超时时间,客户端是直接没有,服务端会直接剔除吗。
Redis中有三种处理策略:定时删除、惰性删除和定期删除。

27.redis的cluster集群,mget批量获取能处理吗,怎么执行的。
3.0 不支持,即使在某些客户端下返回了值,很可能仅仅只是某一个节点的值
4.0 仅支持相同slot,key不能保证在相同slot还是没用






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics