别看是在线笔试,但是非常严格,全称窗口不得最小化和关闭,转移,全称需要打开摄像头监控,使用草稿纸需要摄像头对准……反正2个小时,题量在那儿摆着,有作弊的功夫不如好好做做最后的编程题呢……网易不让泄漏原题,但是我只是说了考察的知识点,不犯法吧……
3月初投了网易内推,当初以为有内推码的就免笔试了,最后空欢喜,有内推码也要在线笔试……先在线填写了简历,等了漫长的半个多月,开始就认为简历挂掉了,毕竟网易,周边的小伙伴,有挂掉的……我都等到上周了才来通知,说今天在线笔试……
总体感觉考察不算很难,但是很广,而且对JavaSE的知识点考察很深入,还不仅仅是考察Java,涉及了设计模式,Java语法,数据库SQL,Linux命令,Windows,数据结构,网络,算法,操作系统等领域,而且编码题不能在IDE上编码,导致很不适应,说明平时太依靠IDE了,也不是啥好事儿。
题型回忆:
- 设计模式就一道题,很浅显,应该是送分的,考察的观察者模式,题目把观察者模式的使用场景大概描述了下,让你选这应该使用哪个设计模式,so easy。
- 第二道正好是我之前总结过的JVM学习记录里的JVM的GC调优和堆区内存空间结构问题,给出了几个GC参数,让计算伊甸园的大小,好像我算错了, 妈蛋,什么东西不复习都不行啊!
JVM学习(4)——全面总结Java的GC算法和回收机制
- 还有一道考察Java语法基本功的,属于Java初始化的范畴,大概类似下面这几个,实在回忆不起100%原题了:
- 就是记住:Java程序并不是一开始就运行自己的构造方法而是先运行其父类的构造方法。注意:子类实例化的时候会先调用父类的构造,然后才调用子类的构造。所以一般在子类的构造中第一条语句就是调用父类构造不过如果没有在第一条语句显示地调用父类构造,那名JAVA会自动先调用父类的默认无参构造,当然这种情况下,你得保证父类必须有无参构造!
class SuperClass { SuperClass(String str) { System.out.println("Super with a string."); } } publicclass SubClass extends SuperClass { SubClass(String str) { System.out.println("Sub with a string."); } publicstaticvoid main(String[] args) { SubClass sub = new SubClass("sub"); } }
View Code
程序在初始化子类时(没有显示调用父类的构造器)先要寻找其父类的默认无参构造方法,结果没找到那么编译自然不能通过。解决这个问题有两个办法:
1.在父类中增加一个默认无参构造方法。
2.在子类的构造方法中增加一条语句:super(str); 且必须在第一句。
class One { One(String str) { System.out.println(str); } } class Two { One one_1 = new One("one-1"); One one_2 = new One("one-2"); One one_3 = new One("one-3"); Two(String str) { System.out.println(str); } } publicclass Test { publicstaticvoid main(String[] args) { System.out.println("Test main() start "); Two two = new Two("two"); } }
View Code
- 从main()方法中实例化了一个Two类的对象,构造方法作用就是初始化。先初始化Two类的成员变量(即在创建对象时对象所在类的所有数据成员会先进行初始化),Two类有3个成员变量,都是One类的对象,那么要初始化这三个对象,就调用3次One类的相应的含参构造方法来初始化它们。最后在初始化Two类的对象。
class One { One(String str) { System.out.println(str); } } class Two { One one_1 = new One("one-1"); One one_2 = new One("one-2"); static One one_3 = new One("one-3"); Two(String str) { System.out.println(str); } } publicclass Test { publicstaticvoid main(String[] args) { System.out.println("Test main() start "); Two two_1 = new Two("two-1"); System.out.println("------------"); Two two_2 = new Two("two-2"); } }
View Code
- 含静态变量的情景,先初始化two类的static的变量,调用one的构造器初始化,打印one-3,再按顺序初始化two类的非static的成员变量,最后初始化two类的对象two_1,如果一个类中有静态对象,那么它会在非静态对象前初始化,但只初始化一次,非静态对象每次调用时都要按顺序初始化一次。
class One { One(String str) { System.out.println(str); } } class Two { One one_1 = new One("one-1"); One one_2 = new One("one-2"); static One one_3 = new One("one-3"); Two(String str) { System.out.println(str); } } publicclass Test { static Two two_3 = new Two("two-3"); public static void main(String[] args) { System.out.println("Test main() start "); Two two_1 = new Two("two-1"); System.out.println("------------"); Two two_2 = new Two("two-2"); } }
View Code
- 程序中主类的静态变量会在main()方法执行前初始化,之后和上个例子一样。
class One { One(String str) { System.out.println(str); } } class Two { static int i = 0; One one_1 = new One("one-1"); static One one_2 = new One("one-2"); static One one_3 = new One("one-3"); Two(String str) { System.out.println(str); } } publicclass Test {//主类 public static void main(String[] args){ System.out.println("Test main() start "); System.out.println("Two.i = " + Two.i); } }
View Code
- 首次访问主类中的静态变量(没有创建对象)时也要先初始化该静态变量,先初始化two类的静态成员(如果有的话),顺序初始,因为主类中,没有实例化新的对象,所以其余的普通成员变量不用管。
Test main() start
one-2
one-3
Two.i = 0
接下来的题顺序忘了,就大概回忆知识点有多少算多少了……
- 考察Java的异常体系,让解释ClassNotFoundException异常和NoClassDefFoundError异常,啥场景出现,如何解决。
- 考察了Java的锁的机制,主要是介绍下自旋锁和互斥锁的概念,区别和使用场景。
- 考察了JDK 5的 JUC 包,给了四个选项,好像有Future,Sephere等,让找出和其他三个区别最大的一个类。考察的是对JUC的熟练程度。
- 考察Java的类加载机制,回答如何卸载 Java 类。
- SQL中 where 后不能出现什么语句,考察的SQL的语法,比较投的Java Web开发……
- ping命令,对局域网内的主机ping通了,内网能上,但是连不上外网,可能是因为啥?
- windows下的exe和dll区别和概念?
- Linux下何时从用户态切换到内核态。考察的Linux的基础知识。
- Linux下的权限命令考察的挺多,出了两个类似的题。
- 一道操作系统进程调度的问题,主要考察短作业优先算法下,求平均周转时间。
- 数据结构的二叉树,已知前序,后序遍历,问该树有几个可能的画法。
- 考察树的叶子节点计算。
- 考察栈的特性,一个编程题,问如何匹配字符串的各种括号,编程实现,在线的,不能用IDE。
- 考察递归算法的时间复杂度和如何改进,我之前总结过,写的是尾递归和线性递归。
JVM学习(1)——通过实例总结Java虚拟机的运行机制
- 还有一个编程题,很遗憾,没做对,大概数据着急了,没咋记……
……
其他的小题忘了,就这样吧。再接再厉!