[感谢小陶的精心整理](http://note.youdao.com/share/?id=fd1b2bc530b39885177969786a4db08f&type=note#/)
经历2017.3.3第一次阿里内推电面,对自己的无知深感同情。
电面问题
1. spark submit任务提交过程
2. JAVA Hashmap的基本结构
3. JAVA 设计模式: 单件模式需要注意什么
ps 3.7号查看自己的申请状态,发现还可以做阿里的编程测试,可能面试官觉得连挂我都浪费时间了吧。做了阿里的编程测试,只能是Java实现(我申请的是JAVA开发工程师),之前做了功课,题没有变。
2017.3.25 网易笔试 14:00——16:00 职位:大数据开发
- 题库用的第三方:牛客网
- 一共三个部分:
- 选择:
1. 数学题:2016!有几个0,fib(9)
2. Linux基本操作:强制删除,查询当前目录,软连接与硬连接
3. JAVA类,并行编程,CopyOnWriteArrayList
- 大题:
1. 写五个JAVA开源库的功能和应用场景
2. Hbase, Hive, Hadoop, 区别与联系
- 编程题:
1. 数组分割:两个子数组之和相等
2. GGGBGBG,返回调整成GGGGGBB的最少步数
3. 不记得了
小总结:编程第一题比第二题,第三题都难,以后要通读三道题以后,先挑软柿子捏
2017.3.27 今日头条内退面试 gg
1. 项目相关,对项目选定某种策略的理解,如何调高GPU使用率,为什么要迁移数据块而不是把cpu, gpu当成资源调度
2. Hashmap的插入
3. 白纸黑字写算法: 堆排序/快排
4. 白纸黑字写算法:求二叉树的某子节点到另外一个子节点的最长路径
小总结:面试前准备了很多辅助线的东西,排序算法的实现只准备了归并排序。基础!基础!基础!重要的事情说三遍。
另外:面试官是北邮学长,人很好,只怪我不努力。今日头条的办公环境像是个大大的蜂窝煤。
2017.3.28百度云计算事业部面试 gg
1. 项目相关:实验室处理的数据有多大,调度优化,你调度的是什么?
为什么要迁移数据块(这样做的效率如何)。数据迁移是如何实现的。有没有用机架。
2. 基础:线程和进程的区别。TCP三次握手和四次挥手。为什么有第三次握手,前两次不就够了?数据库的ACID,什么是原子性,什么是一致性。Hashmap 和 Hashtable的区别,如果单线程的情况,是用哪个。java里面如何完成多线程同步,防止死锁。linux操作怎么统计一个文件里某一个单词的个数。spark里怎么引入第三方类(如果jar里有依赖包怎么引入),spark内存溢出(设置memory)。Mapreduce的过程。shuffle的过程。
3. 算法:链表的环,如何确定有没有环,如何找到环的切口。快排。这次写完算法以后,就算是快排,面试官也让你给他讲一讲,我想主要考察你对快排的理解和你讲解算法的能力。
2017.3.29 vmware & 完美世界的笔试
VMware是90分钟,三道编程题:
1. 数学阶乘:5!含有一个0,那么g(1)=5,g(1)=6,g(1)=7,g(2)=10=5x2,g(3)=15=5x3,以此类推,求min(g(x)).
2. 二分图最大匹配算法
完美世界:
(单选60分,多选20分,编程20分)
选择:各种JAVA基础小题
编程:
1.完全背包问题
2017.4.6 搜狐媒体产品,内容推荐组面试
这次面的有点尴尬,面试官以为我是做web后台。他们不用hadoop和spark.
他们主要想招的是java web和storm的。
有重合部分的仅仅是kafka。
所以面试官关于kafka问了我几个问题:
1. 对kafka理解,优点缺点。kafka跟其他消息队列对比,为什么要用kafka。
2. kafka里的partition
2017.4.7 微软英语线上测试 gg
一共三个部分
第一部分选择:词义理解,语法纠错,阅读理解
第二部分作文:逻辑清晰,减少语法错误
第三部分口语:gg了,还没开始就已经结束了,因为宝宝一直next,还没打电话就next到交卷了。还以为是网络拨号呢……..笨死了
2017.4.27 微软面试 云计算事业部 Azure PM岗
还以为线上测试挂掉了,后来还通知我面试,真是感动恩赐。
地点在中关村微软大厦,1号楼15,16,17层. 环境很喜欢,可以远眺高山和北京电视塔。
一面,二面:自我介绍。很细很细地问项目里的各个细节包括:kafka是怎么流式处理的,你是怎么理解面向对象编程的,还问到了java的虚函数,你是怎么理解云服务的,你是怎么理解mapreduce的,云服务paas,saas…为什么公司要买云服务而不是自己搭建一套。
一面面试官人很nice,我说我代码不太好,他就不问代码了,问问我pm的问题。比如我已经有人脸识别算法了,怎么把它和用户链接起来。还有设计模式,你知道哪些设计模式,如何将不同数据库的逻辑 适应到主数据库逻辑,我答的用适配器模式(设计模式还没有复习到咧)还有人际交往方面的。
二面比较严肃紧张了,问了一个字符串反转的问题,把“I love you”改成“you love I”,要求是原地修改,不占用额外的数据结构,不会gg. 还有一个智力题:54个扑克牌,10个朝上,44个朝下,洗在一起,分成两堆,怎样使两堆正面朝上的牌数相等。
三面:认知服务团队里一位香港面试官,这是我第一次面试可以突破重围,到达最终boss,他的逻辑很好。一开始就介绍接下来的一个小时我们将会
1. 我来介绍自己,自己的职业规划
2. 他来介绍他们团队,以及我们background重叠的部分。
3. Q&A.
总之就是闲聊,聊三观。其中有一个问题自己没答上来,opencv领域里,你知道哪个团队做得最牛。确实,搞技术的应该了解自己研究领域的牛团队才可以进步呀。
后续补充:6月12日参加了微软的女生节,和一起参与活动的女生了解了一下,她面试过很多次微软的PM,每次都觉得自己很有戏,但最后都不了了终(YES,that was exactly what I felt).那是因为微软的面试官都接受过培训,要求鼓励式的,否则面试者可以投诉面试官。
参加完女生节,了解到微软人性化的环境,坚定自己要去微软之路,MS鼓励员工从销售transfer到研发transfer到PM,transfer到技术支持,我很喜欢这样,从不同的角度观察产品,也是从不同的角色寻找自己。
2017.6.14 招商银行暑期实习 面试
*材料准备
第一次应聘金融行业,准备材料的时候,一些参加过的比赛和一些实习经历,因为没有材料可以证明,因为有坑(已经忘了比赛的解决思路了),所以没敢全填,担心面试的时候问。(主要还是因为不了解面试是技术面还是行为面试)。其实都应该全写上,就算是技术面,要是问你机器人某个功能的代码那完全是故意为难你了。
*自我介绍
这次面试其实是蒙逼状态,一是不知道自己应聘的什么岗位,二是不知道对方到底需要什么样的人。流程就是7,8人应聘者和两名面试官在一个会议室,轮流做自我介绍。当时了解到其他人大部分都是学金融的,自己一个工科生无法与面试官产生共鸣,所以拽了拽“互联网金融” “Fintech”,机器学习(由于紧张自己语速太快了,应该慢一点,解释清楚)。面试官在自我介绍结束以后只问了一个问题:写没写过区块链?很多人都在列举自己经历:学生会经历(xx会xx职位xx活动)或者参赛、实习经历。现在回想起来,其实应该根据“学习能力”“适应能力”“行业热情”等方面,着重用具体的事例来证明自己具备这些能力,而不是一味地枚举白纸黑字已经有的内容。
*其他
1. 来参解面试的人都是人之龙凤的感觉,有在加拿大,德国留过学的,还有有父母就是从商的。
2. 男生穿西装,挺直腰背,给女生扶电梯,so gentle, 金融男好感+1。
3. 跟一个在浦发银行实习过的金融女生了解到,金融行业也加班~
后补:过了招行的面试,但不是技术岗,推掉了。
2017.6.30 hulu电面
流程: 十五分种 自我介绍, 了解可以实习的时间 (调整心情,放松放松),然后发了一个网站,hulu自己的online compiler,网页上面没有题目,只是一个编译环境,与面试官屏幕共享,由面试官说题目。
题目: 一个一维数组: 比如 1 1 0 0 1,1代表路,0代表地雷,要从头走到尾,每一步的步长要么等于上一步,要么为上一步的步长+1,求是否可以到达结尾。
dp: f[i][j]= (f[i-j][j] || f[i-j][j-1])&&a[i]. i代表loc, j代表已用步长, f[i][j]代表是否可达。 a[i] 为已知数组。
总结: 一听一维数组,一开始就想到一维dp,可是步长又是可变的,脑子就变成糨糊了,后来经过面试官提醒,才知道用二维状态表示。遇到没有见过的题就不会分析了,看来以后刷题还是要给自己独立思考冷静分析5分钟,再看别人的答案呀。
2017.7.10 百度AR 电话面试PM岗
因为海投的时候既投了百度的AI,又投了百度的AR,接电话的时候提示对方再说一遍,才确定是AR部门,脑子里飞速旋转自己投的什么岗。面试官问我了解什么有关AR的产品。其实此时自己脑子里还没理清AR? AI? PM? DEV?然后就全凭潜意识回答了。完美的错过了这个机会。其实应该直接向面试官问清的(也没搞懂来电话的是面试官还是HR)。总之下回再接到电话以后,先问清对方的职位、部门、打电话的意图,再作答比较好。
另外回答了解什么产品,自己马后炮地总结了一下,可以根据用户分(商业型AR:广告商,娱乐型),也可以根据功能分(移动端AR,设备端AR)。
2017.7.11 滴滴 基础平台部门 大数据平台开发岗 面试
这次感觉被耍了。
招聘要求说是会hadoop啊,spark啊,之类的。但是一面的时候,面试官跟我说他们招实习生是来写一个新的架构,并且特意问我会不会python.
虽然明面上问题都回答出来了,面试官也比较满意。但是终归不是他们要招的人。这个实习的内容也不是我想要的。
招聘贴上应该写明的,生气!
2017.7.12 senseTime 分布式系统实习生
一面就遇到大神地感觉。老白说这家公司很牛,但是硬件设施实在不敢恭维。我说我用opencv处理图片,大神不屑说opencv精度太差,我司不用。大神还说我在研究生的项目,他们分分钟钟就可以完爆。大神就是大神。大神还一眼看出我不是搞技术地料,奉劝我找技术周边地岗位,比如pm之类。大神的话醍醐灌顶。
2017.7.12 AI 测试岗电话面试
跟测试姐姐聊了一会儿,一番自我介绍以后,测试姐姐建议我不要走这条路,她说模型都是加了密给她们测试的,婉拒。
2017.7.14 worldquant量化实习生
不知道为什么,反倒是每次觉得高不可攀地外企可以顺利到三面,其他总是一面就挂。思量之后,发觉一面到三面不是闯关模式,而是平行的关系。最终的结果由三个面试官加权而得,说明多一次面试,多一次争取的机会,而不是绝对地闯关成功。
笔试1小时: python字符串处理基础题(replace, reg, difference)
一面: 简历上的项目,一道dp题
二面: 二面面试官诚实地坦白了实习生工作内容只是预处理数据,不是我想像地写训练模型,很感激他的坦白。然后是一道分割字符串的题
三面:对自己的swot分析,并且坦言说我写代码的功力不够。估计要挂,毕竟有硬伤。
基础篇
IO
Tables | 类 | 处理单位 | 应用 |
---|---|---|---|
字节流 | InputStream/OutputStream | 1 byte | Anything |
字符流 | Reader/Writer | 2 bytes | 多国语言 |
操作流程
在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:
1 使用File类打开一个文件
2 通过字节流或字符流的子类,指定输出的位置
3 进行读/写操作
4 关闭输入/输出
IO操作属于资源操作,一定要记得关闭
三大特性
面向对象编程有三大特性:封装、继承、多态。
封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。
继承是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承。,同时继承也为实现多态做了铺垫。那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开:
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
继承与引用
- String是final类型的,因此你不可以继承和修改这个类
- 对于基本类型变量,Java是传值的副本,对于一切对象型变量,Java都是传引用的副本
- 静态的main方法不能访问一个方法外的 非静态变量
- 重载(overload):对于类的方法(包括从父类中继承的方法),方法名相同,参数列表不同的方法之间就构成了重载关系。
- 覆盖 (override):也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。
栈内存和堆内存
栈内存: 当在一段代码块定义一些基本类型的变量和对象的引用变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
Vehicle veh1;
veh1 = new Vehicle();
veh1为对象的引用变量。第二行代码,这个引用变量指向一个对象。
其他
成员变量,局部变量,静态变量(http://blog.csdn.net/s1amduncan/article/details/52089944)
位操作
http://blog.csdn.net/morewindows/article/details/7354571
位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。
前提:位运算指针对整数 Int
已知int 15的二进制是0000 1111. -15的二进制是它的取反,再补一位,就是1111 0001. 最左边第一位是符号位。int 是8bit
数据结构
链表
http://blog.csdn.net/fightforyourdream/article/details/16353519
散列表
也叫哈希表,通过散列函数或者哈希函数,完成多对一的映射,到散列表或者哈希表。
Hashmap vs Hashtable
Name | Father | synchronized | k,v==null |
---|---|---|---|
Hashtable | Dictionary | yes | 不可以 |
Hashmap | AbstractMap | no | 可以 |
树
http://blog.csdn.net/yang_yulei/article/details/26066409
算法与算法分析
算法时间复杂度
当不用限定词时,一般“复杂度”是指时间复杂度。
DEF:在进行算法分析时,语句总的执行次数
T(n)
是关于问题规模
n
的函数,进而分析
算法空间复杂度
DEF:
kmp算法
kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置。常规方法是遍历a的每一个位置,然后从该位置开始和b进行匹配,但是这种方法的复杂度是O(nm)。kmp算法通过一个O(m)的预处理,使匹配的复杂度降为O(n+m)。
前提:可以继续比较位置i的前提是f的前i-1个位置满足:长度为i-k-1的前缀A和后缀B相同
kmp算法的核心即是计算字符串f每一个位置之前的字符串的前缀和后缀公共部分的最大长度:
例:
c | a | b | c | a | b |
---|---|---|---|---|---|
0 | 0 | 0 | 1 | 2 | 3 |
![详见](http://blog.csdn.net/yutianzuijin/article/details/11954939/)