链家内推面试经验总结-2017.8.26

来源:互联网 发布:python upper函数 编辑:程序博客网 时间:2024/06/08 19:35

基础很重要!基础很重要!!基础很重要!!!

作为从接触到现在只有一年半的Java清汤自学挂,今天终于经历了算得上是人生技术第一面,感触颇多,特此记录一二。

应聘岗位:JAVA后台开发

面试流程:笔试1小时+一面+二面+HR面

(很不幸直接在一面摔了个大跟头!!)

笔试:

个人感觉:理解题很重要啊巴扎黑!!!
笔试5题,1思路4手写编程,题如下:
1,数组A由1000W个随机正整数(int)值组成,设计算法,给定整数n,在A中找出符合如下等式n=Ai+Aj的所有的下标i和j。说明算法思路以及时间复杂度时多少?

2写代码,求二叉树两个节点的最低公共祖先节点,编程语言不限。

这道题是剑指offer上第七章面试案例二的原题来着….当初刷题的时候想着先刷后面的再看面试的,结果…..
而且在理解题意的时候也理解错了,以为是给两个节点,去找第一个公共祖先节点来着….然后就悲剧了….

3,一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的,当且仅当所有球的号码的和大于所有号码的积。
如{1,1,2,3}因为1+1+2+3>1*1*2*3的,所以该袋子是幸运的。
你可要适当从袋子中移出m个球(0<= m < n),使得移出后的袋子是幸运的。现在让你编程计算一下你可以得到多少种不同的幸运的袋子,编程语言不限。

4,Web系统中,需要按照地域维度对用户进行分析,一般会通过用户请求里的IP地址来识别用户所在的城市,假设我们维护了一套IP->城市的关系库,其格式如下,,同一个IP只会唯一映射到同一个城市,请设计一个算法实现用户的地域识别:
IP段=================== 城市
111.222.1.1-111.223.5.127====北京
112.12.1.2-116.123.123.1 ====上海
117.12.1.2-126.123.123.1 ====天津
1)请先描述所使用的关键数据结构;
2)请用代码实现查找识别的逻辑,假设查找函数原型如下:

//输入用户ip,输出城市名String lookup(int userIp){}
这道题吧,主要是在纠结那个int userIp,在做的时候可能有些懵逼吧,脑子转的不灵活,总是想着ip难道不是个字符串么,又想着如何去找寻其中的规律。而且特别容易受到题上的映射关系的影响老想着用map这种来实现….结果….在等待面试的时候,突然想到,ip的长度算下来二进制是32位的,int的长度也是32位的,且int的最大值的开头是转换成ip格式的话也是255,比他们都大的,因此userIp就是以ip形式去.之后进行输入,然后转换成字符串截取比较可以实现。
在面试时问了面试官,告诉我的思路是将其存储到一个数组中进行排序,这样就大致分为了三个城市所对应的三个区,然后对输入的数进行二分查找,落在哪个区域内就属于哪个城市….

5如何实现编辑器中的undo和redo功能?请先描述关键的数据结构和操作过程,然后用代码实现其逻辑。

面试:

**这是一个血淋淋的血的教训啊!!!!!
再一次沉痛地指明!!基础很重要!!!!!
开挖!**
1。自我介绍:老生常谈了,就不多赘述了,时间一分钟之内就好。
2。项目:自我介绍谈到了项目,所以先大致问了一些项目的东西,这就因人而异了。

PS:这部分我觉得大家可以花时间准备准备,打个草稿啥的,因为说的不顺溜真的会尴尬啊,自我感觉还算可以。毕竟是打了个草稿的男孩纸!

接下来,就是被血淋淋的撕碎了来解剖!
我是从7.27号开始进入找工作的准备中的,由于之前都属于自学,学校也没啥课程,也没有啥项目,所以导致对Java的一些知识不是很了解。听说要考算法,就刷剑指offer,听说要考JVM,就看书,听说要问hashmap底层结构实现以及线程同步,concurrenthashmap,就去看博客了解,听说数据库引擎,索引,语句,事务隔离级别要问到,就各种看看看….
结果,忽略了最基础的基础知识,可能也是因为我平时看后没及时巩固复习吧,所以每次都有些临时抱佛脚去巩固基础的感觉,这也是失败的一个根源!!!!

3。Java反射机制

    讲了反射机制的特点,如何去进行反射机制的。    问了我“反射可以访问对象么”,对这个记得不清楚,答曰应该不可以吧,结果被告知可以,让感兴趣回去看看。    **Round1 失败!**

4。多线程。

    讲了多线程的创建,五个状态,因为多线程并发引出的同步,然后说了单例模式。    让手写了一个线程安全的单例模式,下面是完整的:
public class SingletonTest {     // 定义一个私有构造方法    private SingletonTest() {     }       //定义一个静态私有变量(不初始化,不使用final关键字,使用volatile保证了多线程访问时instance变量的可见性,避免了instance初始化时其他变量属性还没赋值完时,被另外线程调用)    private static volatile SingletonTest instance;      //定义一个共有的静态方法,返回该类型实例    public static SingletonTest getIstance() {         // 对象实例化时与否判断(不使用同步代码块,instance不等于null时,直接返回对象,提高运行效率)        if (instance == null) {             //同步代码块(对象未初始化时,使用同步代码块,保证多线程访问时对象在第一次创建后,不再重复被创建)            synchronized (SingletonTest.class) {                //未初始化,则初始instance变量                if (instance == null) {                    instance = new SingletonTest();                   }               }           }           return instance;       }   }
想象总是美好的,现实是残酷的!!!写完之后,我以为就完了,结果面试官问我为什么要判断是否为null之后里面还要判断,我说了原因,在说的过程中说的不是很完美,总感觉面试官可能觉得我这块说的没有那么尽人意。**Round2 尚可。**

5。集合类

    问我对Java哪方面最熟悉,我还没有回答呢。就问我了解集合类不。    上来就是手写集合类的框架图.....    写完之后问我hashSet和treeSet底层结构,问了hashSet遇到冲突怎么办?!说了常见的那几种。    问了我Vector和ArrayList的区别,底层结构....这个答得一般。感觉没有答到点子上,因为对这方面的研究不深。    然后,面试官让我回去对这块的底层实现多了解了解!!!!    **Round3 失败!**

6。git命令
在简历上写了会git版本控制工具,然后让我说一系列的操作命令。
从git add all一直说到了push。并直接在演草纸上手写了一遍,并讲解每个命令是干嘛的。
Round 4 尚可。
7。jdk1。8新特性
这完全就是个惨剧!!
由于最近几天看的都是hashmap啥的,jdk1.8的新特性确实没啥了解,于是就从hashmap的底层实现以及jdk1.7和jdk1.8对hashmap的优化上进行了阐述,从上到下,从前到后挨个说了一遍。什么hash的高位运算啊,什么红黑树啊。都讲了一遍。
但是讲的并不在点子上啊!!!悲了个催!!!
Round5 完败!!!!

向面试官提问

1。Linux,redis的应用是否多
给我的回答是redis相对较多,Linux一般查看线上程序问题什么的使用的较多来着,但对应届生在这方面的要求不高。属于锦上添花类。
2。框架的要求。
如上,也是没做啥强制性要求的。
3。问了下平时对于算法数据库的应用啊什么的。
4。由于笔试算法基本上没写,所以这部分也就没问了。
5。本来都打算结束了,不知道咋地。破罐子破摔的我,直接向面试官问了一下笔试的第二和第四题,主要是觉得自己的理解不到位。然后面试官也很nice的讲了一道。

后记

本来熬了一夜,感觉也没啥效果,还弄得脑袋胀痛。
在一面来说,问的基础是很多的,应该算法什么的高层次的会在二面问吧,毕竟无缘,也就不得而知了。
感觉自己基础还是很薄弱,得着重加强。没事看看底层结构啥的。
像我的朋友,一起去的,直接让回来多看看Java开发手册….
她倒是问了数据库索引,事务等,等我问了她再来补充!!!

希望自己多总结经验,再接再厉!!
不妥协,不后退!
也希望如我一般找工作的朋友们得偿所愿!!

PS:前面写的博文基本上没啥好看的 ,由于是第一次看JVM,还拿着别人的书,所以基本上定义的东西比较多,自己的理解比较少,。。。等我后面再修改吧。
PS:如果哪位大神对这几道题有啥思路,求解啊!!
我自己也会再想想的,最近笔试多,也是real消耗时间精力啊。。。