临近毕业,最近笔/面了几家公司,挺有感触,记录分享一下。
笔试部分
字节T动(Java)
大厂笔试往往是圈内的焦点,今年zjtd后端笔试,四道基础算法水题,全过的人一大片,但是我不一样,只AC两题,后悔之前没有跟着大佬坚持走算法的道路。
字节跳动后端开发(C++/Java同题)
恒S电子(Java)
作为阿里系的成员,笔试形式却跟其他"妖艳贱货"不一样,当大厂们纷纷享受着在线笔试第三方托管(牛客网、百一测试),恒生却在各大高校(浙大玉泉、杭电本部、工大屏峰)进行现场考试,这也算近距离体验学渣跟大牛的区别。
笔试分为:不定项基础选择题、不定项C/Java基础选择题(二选一)、数据库操作题、编程题、算法题。接下来是性格测试18题(不记分)、逻辑智力题(计分)
虽然我没有拍下我的试卷(因为大佬半小时交卷时特地问过能不能把试卷带走,监考明确拒绝了)。大家可以自行体验一下往届题目。
回忆下题目,记不全或记错,大家可以指正一下哈:
数据库:给你三张表,分别为user(userId,userName,account),accoInfo_201811(userId,account,date),accInfo_201812(userId,account,date)
给某用户充值200块(user表)
查询某用户201811最高消费
给xx表加个外键
查询某用户11、12月的总消费
编程题:给了一个接口,定义两个方法putTask()和getTask(),现在有三个Task对象,让我们实现队列。按队列1、队列2、队列3的顺序放入,按队列1、队列2、队列3的顺序拿出
算法题:手撸代码,实现遍历二叉树
T花顺(Java)
在看了ths在知乎上的风评后,本着有机会就得抓住的理念,我打开了他们自家的考试系统,每个题都有编号而且都不小,估计题库挺多的。之前网上找到的往年题目,大多数C++/客户端/Java混杂的题目,而且官方还确认了,这是校招都需要具备的能力2333。但是打开后发现没啥越界的题目,都是一些Java基础,记录了几个,如下:
//以下Java代码中,正确的有几个
// 1.
public class Something{
void doSometing(){
private String s = "";
int l = s.length();
}
}
// 2.
abstract class Something{
private abstract String doSometing();
}
// 3.
public class Something{
public int addOne(final int x){
return ++x;
}
}
// 4.
abstract class Name{
private String name;
public abstract boolean isStupidName(String name);
}
//以下代码打印的结果是什么
class PrintTest{
try{
String[] codeList = {"01","02","03","04"};
Map map = new TreeMap();
map.put(3,3);
map.put(3,3);
map.put(2,2);
map.put(4,4);
map.put(1,1);
for(int i : map.keySet()){
System.out.println(map.get(i));
}
System.out.println(codeList(4));
}catch(Exception e){
System.out.println("Error");
}
}
//下面程序的运行结果是什么
class HelloA{
public HelloA(){
System.out.println("HelloA");
}
{System.out.println("I'm A Class");}
static {System.out.println("static A");};
}
public class HelloB extends HelloA{
public HelloB(){
System.out.println("HelloB");
}
{System.out.println("I'm B class");}
static {System.out.println("Static B");}
public static void main(Stirng args[]){
new HelloB();
}
}
private class Base{
Base(){
int i = 100;
System.out.println(i);
}
}
public class Pri extends Base{
static int i = 200;
public static void main(String args[]){
Pri p = new Pri();
System.out.println(i);
}
}
// A.这段代码不能通过编译
// B.输出200
// C.输出100和200
// D.输出100
// 下面的方法,输入数字2,返回值是多少
static int getValue(int i){
int result = 0;
switch(i){
case 1:
result = result * 1;
case 2:
result = result * 2;
case 3:
result = result * 3;
case 4:
result = result * 4;
}
return result;
}
// A. 2
// B. 4
// C. 12
// D. 18
//下列程序输出什么
public class ArrayTest{
public static void main(String args[]){
char[] ch1 = new char[2];
ch1[0] = 'a';
ch1[1] = 'b';
char[] ch2 = new char[2];
ch2[0] = 'a';
ch2[1] = 'b';
System.out.println(ch1.equals(ch2));
}
}
还有一些进阶题,比如算法之类的。
PHP
PHP更让人感觉是业务方面和基本功方面的笔试,我面了两家公司,第一家考的是数组的转化:
$arr1 = [
"color" => "黄色",
"color" => "红色",
"color" => "紫色",
"size" => [
"length" => 100,
"height" => 100,
]
];
//变为
{
"len" : 100,
"height" : 100,
"color" : {
0 : "黄色",
1 : "红色",
2 : "紫色"
}
}
第二家考的简单的业务处理和基本功
//现在有一个问题的答案为A,B,C,D,E,F,正确答案为C,E。学生作答的答案保存在"answer.txt"文件中,个数如下
// 1:A,B
// 2:B,C
// 3:A,B,C
// ...一共20条
// 要求统计各个答案出现的次数、答对的人的学号、漏选的人的学号
面试部分
面试基本不会缺少的:自我介绍、项目经验。
自我介绍:大多数时候HR会在你自我介绍的时候查看你的简历,可能之前看过或者在找提问点。建议提前写一个稿子,2-5分钟皆可。介绍的时候观察HR的变化,如果她一直在看你的简历,说明她可能之前没有事先仔细看过,那你可以多介绍一些,让她有充足的时间看。如果HR看完了,目光转移到你身上,那么她已经做好提问的准备,你可以适当忽略掉一些无关紧要的介绍,早点进入问答环节。如果HR从一开始就在认真听你的自我介绍,那就尽可能表现最好的一面,因为她是真的想从你的介绍中分析你的性格、特征等。
项目经验:项目经验很多时候,都会有包装的情况存在。但是作为一个必问的环节,包装的时候也不可太过分。不懂技术的纯HR可能不会对你的项目进行发问,但是也不排除有开发背景的HR,可能在HR面,就你不深入的环节,进行致命提问。但是不管是哪个,总归会有技术面,是不是过度包装,一问便知。所以大家尽可能的把最了解的部分写上去噢。
然后是应届毕业生,必然会提问的部分,就是基础:
Java
Java8的新特性是什么?你是否使用过?
抽象类和接口的区别?
HashMap的特点是什么?底层是如何实现的?
Map有几种遍历方式?
List的特点是什么?底层是如何实现的?
List和Set有什么区别?使用上有什么不一样?
String类是否能被继承?
哪些类不能被继承?
Cookie和Session的区别?如何一起使用来保持登陆状态?
数据库调优了解多少?索引?
分布式了解多少?
Redis了解多少?
缓存了解多少?
PHP
PHP7新特性是什么?有使用过嘛?
PHP的基本类型有哪些?
PHP的静态变量和全局变量有什么区别?
HTTP常见状态码?
常见Linux操作?
实现某一功能时MySQL语句怎么写
框架了解程度
数据库调优
API如何保证安全
技术对你的项目进行提问
这方面基本上是考验你平时是否有所积累,像我上一个项目也有半年多了,没有把开发过程中的问题记录下来,你很难去临时想象你当时碰到的是什么问题,怎么解决。你只能说出很笼统的回答,可能会导致技术人员对你项目的真实性存疑。
技术人员对项目的提问几乎都是深入性的,比如说你在项目中写了,使用SpringBoot框架,他会由浅入深地问你,为什么要选SpringBoot框架?(因为启动快,配置简单)配置简单,那它是通过什么机制来使配置生效?(……)如果你回答不上来,就继续找,比如说看到你写了Cache,就问你,SpringBoot的缓存机制是怎么实现的?总之很多情况下,技术人员会对你所了解的框架进行更深层次的提问。
HR面
HR面,在我看来是双向的,HR可以从你的言语神态中观察你的意向和状态,你也可以在HR的话语和神态中观察她的意向和状态。比如我之前面的一个外包公司,一进去就直接跟我聊加班、外包、技术培训、入职初期工作,你可以很明显的感受到公司用人的急迫,试探你的底线。在我提问的环节,我经常会问:公司一天的工作是怎么样的?HR在回答的时候,你也可以从字里行间感受到,他是否受到了公司的关怀,对公司的态度如何。也有资深HR,能很好的引导谈话的内容,并总结你说过的话,分析出你的性格,技术深度等特点,并给予你一些职业方向上的指点。但是无论如何,面试的过程都是无害的,一定要放好心态,不卑不亢,才能稳操胜券。
总结
在最后,面试/笔试了这么多家,也在看准、知乎上参考各家的评论,实地了解公司真实的开发环境。对我个人而言,心中有一个不小的疑问。一方面像一些私企,规模大,但是技术为其他产业服务,内部人际关系复杂,开发环境落后,技术停滞不前,虽然福利薪资不成问题,但是总归少了互联网的氛围和气息。另一方面,创业性质的小团队,可能给不出豪华的福利薪资,但是团队激情方面着实不错。另外部门之间的扁平化管理、团队年龄无代沟、互联网气息、对技术的狂热追求,这些都是很吸引年轻人的地方。至于这么选择,相信大家都有自己的想法。