公司名称:用友软件
业务领域:管理软件、ERP
公司性质:私企、股份有限公司
福利政策:五险一金等,年薪10W
应聘流程:
宣讲会现场笔试:(下附当时难住我的题目)
1.java中i++与++i的区别、
答:同C++语言中规则一样,i++先返回原来的i值再自加,++i中i先自加再返回i值。例如i=1,i++先 返回1然后i变成2,++i直接返回的2。
2.读程序,判断输出结果是什么
1 String s1 = "String"+ 1;
2 String s2 = "String"+ new Integer(1);
3
4 if(s1 == s2){
5 System.out.println("s1 == s2");
6 }
7
8 if(s1.equals(s2)){
9 System.out.println("s1 equals s2");
10 }
答:==符号是判断s1与s2的引用是否相同,由于s2中的1是用new语句新建的,故与s1中的1不同,所以s1与s2的引用不同,而值相同。所以输出为s1 equals s2。
第一轮技术面试:
用友的技术面试问的很深,内容包含数据库锁、时间复杂度、空间复杂度、java内存泄露的例子、MySQL存储引擎有哪些等。直接止步此轮~
补充知识:
1.Java内存的分类:
Java内存分为两类,第一类是栈内存,程序进入一个方法时分配给此方法的私有存储空间,用于存发放内部的局部变量,当方法结束时栈内存会释放,栈内存中的变量也被释放。第二类是堆内存,用于存放new创建的对象及其他不放在栈中的数据,采用java gc机制,用有向图维护释放。方法中的局部变量用final修饰后,放在堆中。
2.Java内存泄露的例子:
所谓内存泄露是指一个不再被程序使用的对象或变量一直占据着内存资源。在Java中,当长生命周期对象持有短生命周期对象的引用时,就可能发生内存泄露。尽管短生命周期对象已经不再需要,却因为长生命周期对象持有其引用而导致不能被回收。例如:程序中含有一个全局map对象,之后某一个方法中的局部变量被放入了此map对象中,那么当该方法结束后,局部对象一直被引用,却不再被使用。