笔试复盘

这篇博客回顾了Java面试中的重点问题,包括int转long、引用传递、ConcurrentHashMap的put方法、Spring循环依赖处理、线程安全、反射机制在泛型中的应用、JVM内存结构以及算法题如LRU实现等。内容涵盖了基础语法、并发编程、JVM原理和数据结构等核心知识点。
摘要由CSDN通过智能技术生成

1. int转long

	long val = 24 * 60 * 60 * 1000 * 1000l;
    long val1 = 24 * 60 * 60 * 1000 * 1000;
    System.out.println(Integer.MAX_VALUE);
    System.out.println(Long.MAX_VALUE);
    System.out.println(Long.MIN_VALUE);
    System.out.println(24 * 60 * 60 * 1000);
    System.out.println(val);
    System.out.println(val1);
    System.out.println(val / 60 / 60 / 1000 / 1000);
    // 1 这里最后结果是0的原因是计算过程中产生的是int再转的long
    System.out.println(val1 / 60 / 60 / 1000 / 1000);

2. 引用传递

另外:对于打印char[] :
char类型的数组就相当于一个字符串。

char类型的数组就相当于一个字符串。

因为输出流System.out是PrintStream对象,PrintStream有多个重载的println方法,其中一个就是public void println(char[] x),直接打印字符数组的话,不像int[]等其他数组,它会直接调用这个方法来打印,因而可以打印出数组内容,而不是地址。

3. ConcurrentHashMap的put方法简述

自己的答案:

  1. 先判断当前容器是否被初始化,如果没有初始化则先初始化
  2. 然后先根据key使用(key & (len - 1))的方式计算出所在位置
  3. 如果该位置为空,则直接使用CAS插入即可,然后判断此时是否达到了阈值,是则进行扩容。
  4. 如果该位置不为空,则需要先加锁
  5. 然后先通过hash进行比较,相等再通过equals比较是否相等,相等则直接替换值,如果不相等再看该节点是链表节点还是红黑树节点,然后按照对应数据结构的遍历方式依次遍历,直到相等后替换值或者找不到则插入对应的数据结构,插入之前如果是链表则需要考虑是否满足条件(元素size大于64,链表长度大于8),是则转换为红黑树。
  6. 看是否达到了阈值,达到了就扩容

根据源码补充的答案:
1. 先对key使用扰动方法((key.hashCode() ^ (key.hashCode() >>> 16)) & 0x7fffffff)得到hash值
2. 判断是否为null,是则进行初始化(初始化过程中只能让一个线程初始化)
3. 然后根据hash值通过hash & (len - 1)得到所在位置
4. 判断所在位置是否为空,为空直接使用CAS插入
5. 如果不为空,则先加锁(Synchronzied),加锁范围限制在通过hash找到的节点上
6. 先判断f节点是链表节点还是红黑树节点,是链表节点的话,通过for循环一个节点一个节点的判断(先判断hash,再判断是否相等),最后找到了节点的话,就替换值,如果没有找到,则在尾部插入
7. 是红黑树的话,则依照红黑树的遍历方式遍历最后插入或替换
8. 此时同步块结束,开始判断如果是链表,看是否满足条件(转化为红黑树的条件),满足则转换。
9. 此时增加size,看是否达到阈值,达到则扩容

4. 有三个bean A、B、C;其中,A依赖于B,B依赖于C,C又依赖于A,这样能否正常启动?

Spring中循环依赖场景有:

(1)构造器的循环依赖

(2)field属性的循环依赖

其中,构造器的循环依赖问题无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采用的是提前暴露对象的方法。

https://blog.csdn.net/xx897115293/article/details/108635440

https://www.cnblogs.com/jajian/p/10241932.html

https://zhuanlan.zhihu.com/p/62382615

https://segmentfault.com/a/1190000019286083

5. spring bean 如何保持线程安全,为什么?

对于有状态的bean(比如Model和View),就需要自行保证线程安全,最浅显的解决办法就是将有状态的bean的作用域由“singleton”改为“prototype”。

也可以采用ThreadLocal解决线程安全问题,为每个线程提供一个独立的变量副本,不同线程只操作自己线程的副本变量。

https://www.cnblogs.com/frankcui/p/14341795.html

6. 现有集合ArrayList list = new ArrayList(); 利用反射机制在这个泛型为Integer的ArrayList中存放一个String类型的对象。

先解释:
可以使用反射技术,来获得add方法,这样的话就可以随便存了,sun规定的泛型只是将错误上升到编译时期,在运行时期没有泛型的。直接使用反射得到add方法就不会再有泛型的限制了

代码:

public static void main(String[] args) throws Exception {
   
			List<Integer> list = new ArrayList<Integer>(); //定义Integer泛型
			String str = "abc";
			Method[] method=list.getClass().getMethods();//取得list的所有方法
			System.out.println(method.length);

			for(int i=0;i<method.length;i++){
   
				System.out.println(method[i]);//遍历打印list的方法
			}

			//通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
			method[0].invoke(list, str);

			System.out.println(list.size());

			
### 回答1: 2023年的数字IC设计秋季招聘已经结束,现在来回顾一下这次复盘。整个招聘过程,有数十家公司参加了笔试和面试,竞争非常激烈。 首先是笔试环节。笔试题目涵盖了数字电路设计、计算机组成原理、操作系统、数据结构等多个领域,题目难度也有所不同。其,一些较难的题目需要对底层硬件有较深的理解和编程能力,还有一些考察算法和数据结构的应用,对于应聘者的基础能力要求较高。 然后是面试环节。面试,面试官对于应聘者的技术能力、项目经验、学术背景等方面进行了深入的了解,考察了应聘者的思路清晰度、解决问题的能力、团队协作能力等方面。 整个招聘过程,很多公司更注重应聘者的实际能力和潜力,将实力放在第一位,并且更加关注应聘者的全面素质和团队协作能力。 总的来说,这次数字IC设计秋招复盘展示了很多应聘者的编程能力和技术水平,对于应聘者而言更是一次宝贵的机会,同时也给了招聘公司更多的选择和发现优秀人才的机会。 ### 回答2: 2023数字IC设计秋招已经结束,各大公司也陆续公布了面试结果。回顾这次秋招的笔试和面试,可以发现许多新的趋势和特点。 笔试题趋势 首先,笔试题目趋向综合,不仅包括专业相关的知识,还涉及到诸如计算机编程、英语等的综合考核。这也足以印证了人才市场对于全面素质的重视。 其次,笔试题目更加注重实战能力,许多题目涉及到实际的设计场景和问题,需要熟练掌握工具的使用和项目的整体规划、协作。 再次,笔试题目考察重心更加突出学生的综合素质,注重全面考核应聘者的理解、分析、判断能力以及沟通协调等,更贴近企业实际需求。 面试特点 首先,面试对个人的专业能力和综合素质要求都很高,需要应聘者具备扎实的理论基础和实际工程经验,同时在沟通协调等方面也应有较强的个人能力。 其次,许多公司的面试特别注重细节问题,通过提问、测试等方式来发现和检验应聘者对细节的注意力和对整个系统的整体把握能力。 再次,许多企业对于应聘者的人品、性格、偏好等也会考究,主观因素对于面试结果有着不可忽视的作用。 总之,就目前的趋势来看,未来数学IC设计秋招,企业会更注重全面素质的考核和综合能力的培养。希望广大参加秋招的同学都能沉淀好自己的能力,提高自身综合素质,为以后的职业发展夯实基础。 ### 回答3: 2023 数字 IC 设计秋招已经落下帷幕,各家公司的笔试题、面试实录也相继公布。我们可以通过分析这些题目和面试问题,来了解企业对应届毕业生的需求和期待,也可以总结自己的申请情况,为下一轮招聘做好准备。 首先,我们可以对各家公司的笔试题进行分类。大多数公司的笔试题目都围绕数字电路设计、模拟电路设计、通信电路设计、计算机组成原理等方向,题目难度较高,需要考生运用自己的专业知识进行解答。同时,也有部分公司会增加智力测试、数学逻辑等综合能力题目,考察应聘者的综合素质。为了应对这些题目,应聘者需要熟练掌握专业知识,同时也需要加强自己的综合能力训练。 其次,我们可以分析各家公司的面试问题。大多数公司的面试问题都是围绕应聘者的个人经历和能力进行的,包括个人介绍、自我评价、项目经验、职业规划等方面。同时,也有不少公司会增加逻辑思维类问题,考察应聘者的思维能力和解决问题的能力。为了应对面试,应聘者需要在个人经历和能力上强化自己的优势,并且提前思考可能会被问到的问题,对应准备相应的答案。 在总结这次秋招经验的同时,也要注意未来的趋势和发展方向。随着数字 IC 设计的不断发展和创新,新技术不断涌现,应聘者需要不断学习新知识和新技术,以适应未来发展的需求。同时,公司也会更加注重应聘者的综合能力和创新能力,因此应聘者需要在专业知识的基础上,注重自己的软实力和创新思维的培养。 总而言之,2023 数字 IC 设计秋招是一个很好的学习和锻炼机会。通过这次经历,应聘者可以更好地了解自己的实力和优势,也可以借此机会探索未来的发展方向和趋势。希望未来的应聘者可以以积极的心态面对挑战,不断学习和成长,为未来的数字 IC 设计行业做出更大的贡献。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值