每天一套面试题Day7-小红书(1)

1.synchronize的用法及原理

链接

2.如何创建线程池?线程池常见参数有哪些?

Executor工具,ThreadExecutorPool(X)的构造器 核心线程数,非核心线程数空闲时间,任务队列,拒绝策略,最大线程数

ThreadExecutorPool->ThreadPoolExecutor

3.ThreadLocal 的用法和实现原理

用来保存和每个线程绑定的一个变量。用set和get方法存入和取出当前变量的值。通过空间上的隔离支持了并发 这个变量存在thread对象中,thread对象有一个属性,threadLocals,它的类型是ThreadLocalMap,是在ThreadLocal类里面定义的一个类。通过ThreadLocal这个工具,可以设置当前线程对象的这个属性,key是当前threadLocal对象,值是设置的值。

4.请你说说HashMap底层原理和扩容机制。

HashMap底层采用数组+链表(JDK8前),后用数组+链表/红黑树(在链表长度超过64?), 初始容量为16,扩载因子0.75,当超过容量×扩载因子的时候,容量会变成原来的二倍,然后重新哈希,在JDK8之前需要重新计算,由于要么放在原序号的位置,要么放在原序号+数组,原序号与上新数组的大小,如果true那么就放在原序号+原数组大小的位置,反之就在原位置。

原数据通过尾插法迁移到新数组。链表长度超过8且数组长度≥64时会转为红黑树

5.请你说说ArrayList和LinkedList的区别。

ArrayList基于动态数组,随机访问比较快,只需要数组基址+数据的大小×序号,但是增删相对慢。ArrayList基于双向链表,所以增删改比较快,尤其是首尾的。

LinkedList每个节点含前后指针更占内存

6.你了解的JVM内存模型

线程共享的 堆,存放对象实例。方法区,存放类信息,常量 线程独有,随线程生而生,随线程灭而灭 虚拟机栈,程序计数器(存放当前指令的地址),本地方法栈

7.Java的垃圾回收算法

引用计数式垃圾收集(直接收集)

追踪式垃圾收集(间接垃圾收集) 可达性分析算法 标记-回收(老年代,有内存碎片),标记-整理(减少内存碎片),标记-复制(适合新生代,减少内存碎片)

8.类加载机制

加载(双亲委派,生成class对象),验证,准备,解析,初始化

类加载机制是JVM动态加载类的过程,包含加载、验证、准备、解析和初始化五个阶段。加载阶段读取.class文件生成Class对象;验证确保字节码合法;准备为静态变量分配内存并赋默认值;解析将符号引用转为直接引用;初始化执行静态代码块和变量赋值。各阶段顺序执行,确保类正确加载且符合安全规范。

9.说说你对AOP的理解

面向切面编程。切入点(匹配的条件),切面(封装横切逻辑的模块,比如日志切面,由when(通知,比如@After ),where(切点,比如,"execution(...)")what干什么组合而成),通知(定义何时执行什么功能的代码块) Spring AOP通过动态代理实现,分为 JDK动态代理(目标类实现了接口,代理类实现与目标类相同的接口),CGLIB动态代理(目标类未实现接口, Code Generation Library,代码生成库,生成目标类的子类作为代理类。)

10.Bean的生命周期

链接

#面试真题#
全部评论

相关推荐

我是一个普通人,双非普本,两年前开始卷Java,在校做过一些很普通的项目,有过一段外包公司Java实习、it技术支持实习,最后Java卷不动,毕业就在四线老家的某互联网分公司,干着酒店pms维保工程师,拿着5.5k底薪,待遇五险+12%公积金+双休+法定节假日,早9晚5点半,不加班,基本上到点就走,工作强度一般,周末也有闲暇时间各种Java凉了的消息满天飞,但相比其他岗位而言,Java岗位还是挺多的,只不过应聘者个个都有实力,也卷的要命,所以,学Java首先得承认自己是那块料,然后付出成倍的努力才能卷的赢,我深知自己不是这块料,付出努力也没有太好的效果,于是果断放弃Java,说到底,Java本身没问题,只是我有问题罢了但学Java对我而言,真的一点用都没有吗?不是的,相反,正是从学Java到自己做项目,积累了第一段实习经验后跳槽,再继续做项目、优化简历,拿到第二段技术支持的实习,毕业后才有了这份工作,Java对我而言,不是最终目的,而是一个跳板,能让我在非Java程序员的岗位竞争中有一点点优势所以,我仍悲观的认为,包括我在内,大部分普通人是不适合学Java的,从外部原因来说,Java入行的门槛已经不再像几年前那样低了,在当今社会越来越卷的趋势下,想要入行所需知识和技能将是非常多的,即使拼了命的学Java,可能都追不上大佬的步伐我也曾经有过面试中小公司倒在二面三面的经历,也曾亲自在招聘网站上看到某Java岗位,在两三天内收到上百份简历的记录,不由得感叹:能最终拿到offer的,或是是天资聪颖,或是凭着顽强意志玩了命的卷(隔壁宿舍有人作息颠倒卷前端最终拿了大厂offer),而作为绝大部分的普通人,最终可能成为陪跑者对于我而言,我深知我所处的条件,学Java并没有太多优势,也并非真正热爱编程,更重要的是,从我两次的实习经历来看,我很讨厌加班,想下班后能有真正属于自己的时间,我可以利用这些时间享受生活,或花时间卷我想卷的,而不是被工作推着走,于是,我在大四上学期,便放弃对Java的执念我并不反对Java卷成这样,毕竟这是属于时代的问题范围了,而且适者生存,总有人能在激烈的环境中脱引而出,但作为绝大多数普通人中的一员,思考Java是否真的适合自己去学,自己是否真的能适应真实的工作强度,显得尤为重要,我们应更多的去探寻自身优势和感兴趣的领域,并为之发光发热,把我们比作螺丝钉,理想状态下,应该让每一个螺丝钉都能选择自己适合的位置,而不是一个位置让成百上千个螺丝钉挤在一起
在debug的伊泽瑞...:太卷啦 我来这都是100+ 选了两个。我并不觉得当时对手就比我差 只是我运气好点罢了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务