小弱石的求职季笔记(一)
今年因为六级没过,本应轻松拿到保研资格的本渣不出意外地被打到候补资格。
九月二十来号的时候才看到资格公示,哇咧果然没有我。真的是对不起一直想要收我当研究生的张老师了。原本我就是一直想直接找份工作,做点自己喜欢做的东西,到了大三下学期才遇到张老师,发现老师所在实验室的研究课题(计算机图形学相关)实在对我胃口,突然就萌生了想读研的念头,然而六级没有及时补上...
于是10月份开始广投简历,每天刷着厦大就业指导中心的网站,看看哪里有招计算机类的宣讲会...
燃鹅,此时已经错过了很多互联网公司,而且还没有怎么复习专业知识,在许多人已经签下高薪offer的现在,我还是一路碰壁的呀hh~
碰壁倒没什么,但是碰了之后得涨姿势呀!于是决定记录一下面试中遇到的,值得记录的问题。也算是为之后的笔试面试做准备,顺便为广大人民群众做一点点微小的...贡献吧~
一、 网易广州,Java工程师笔试。(笔试没过)
这是第一次笔试,投了简历后过两天就直接笔试了,考完一脸懵比,恍然发觉自己基础知识真是忘得差不多了。记忆比较深刻的是其中有一个简答题,要写一个线程安全的单例模式......没写出来,考完赶紧补一波设计模式基础知识,这方面知识一直没接触过,突然考起来真是什么都不懂。
于是赶紧在eclipse上跑了两个线程安全单例模式的demo:
1.线程安全的饿汉式单例模式(饿汉--一开始就创建实例):
public class DemoSingleton { private static final DemoSingleton instance = new DemoSingleton(); //一开始就创建实例 private DemoSingleton() {} //私有构造函数,防止外部调用 public static DemoSingleton getInstance() { return instance; } }
2.线程安全的懒汉式单例模式(懒汉--用到时再创建实例):
public class DemoSingleton { volatile private static DemoSingleton instance = null; //volatile保证实例的使用是可预见的,一开始设置为null,等到使用时再创建 private DemoSingleton() {} public static DemoSingleton getInstance() { try { if (instance != null) {} else { Thread.sleep(300); //为测试是否线程安全而设定 synchronized (DemoSingleton.class) { //采用DCL,即双检查锁机制来保证线程安全 if (instance == null) { instance = new DemoSingleton(); } } } } catch (InterruptedException e) { e.printStackTrace(); } return instance; } }
至于测试的话,就写一个类,开上多线程,都调用getInstance().hashCode()看看结果是否相同即可。
二、欢聚时代(YY),C/C++工程师。(一面没过)
网易笔试才过两天,就到YY笔试。笔试是一些基础的C/C++题目,因为之前学的还可以,答得还算全,编程题就是写个二分查找算法,比较简单。
一面直接让我跑到广州欢聚的总部,记得好像是10月9号下午。6号刚从广州玩回来,晚上到厦门突然收到面试短信,我去,赶紧又定了8号去广州的票......
可惜还是准备太仓促,知识储备有点混乱了,面的时候还把static变量在函数中的作用说成了,在函数结束后清除......蠢蠢的。
刚开始是直接抛出一个问题,”谈谈C++的虚函数吧“,哇这个谈谈有点宽泛吧,有点懵啊,而且当时虚函数这方面忘了好多,于是就说了个虚指针、虚表什么的糊弄过去了。到后面有比较详细地复习关于虚函数的东西,这里就先不谈吧。
然后单例模式也有问到,这个就刚好因为网易那题目补上了,也就答上了。
后来比较经典的问题就来了,问我TCP的三次握手和四次挥手,这个也比较熟了,也能答上,不过当时第一次面试,比较紧张,讲述得不是很流畅。
还有比较经典的问题就是 const、static 分别有什么作用:
1. const关键字至少有以下几种作用:
a. 如果想让一个变量是只读的,可以用const修饰。定义const变量时,一般都要对其进行初始化,因为之后便无法改变了;
b. 对于指针,可以指定指针本身为const,也可以指定指向的数据为const,或者二者同时为const;
c. 在一个函数的声明中,const可以修饰形参,表明这是一个输入参数,在函数内不能改变其值;
d. 对于类的成员函数,有时必须指定其返回值为const类型,以使得其返回值不为”左值“(否则可能会有 a*b = c 这种表达成立);
e. 对于类的成员函数,若指定为const,则其为常函数,不能修改类的成员变量。
2. static关键字至少有以下几种作用:
a. 函数体内static变量作用范围为该函数体,不用于auto变量,该变量的内存只会被分配一次(在静态存储区),因此其值在下次调用石仍维持上次的值;
b. 在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外其它函数访问;
c. 在模块内的static函数只可以被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
d. 在类中的static成员变量属于整个类所有,对类的所有对象只有一份复制;
e. 在类中的static成员函数属于整个类所有,该函数不接收this指针,且只能访问类的static成员变量。
前两次的主要问题就这些啦,其实都是因为自己知识储备太浅,才导致的失败。
吸取教训,继续加油咯~(未完待续...)