欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-14 16:05:20
...

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

作为从接触到现在只有一年半的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消耗时间精力啊。。。

相关标签: Java面试经验总结