简历投得晚,大部分内推都错过了,参加了好多笔试,一直没有面试。昨天接到涂鸦移动的电话,说笔试通过,约今天下午面试。终于不再徘徊在笔试阶段,迎来了找工作第一面。
总结一下面试中问到的问题吧。
Linux指令
- 如何查看操作系统信息?centos版本、32位还是64位等
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# lsb_release -a
LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description: CentOS release 5.5 (Final)
Release: 5.5
Codename: Final
- 如何根据进程名获取pid?
//显示进程名为test的所有信息
ps -aux | grep test
//只返回进程号(print $2含义:指定所有信息中的第二列)
ps -aux | grep test | awk '{print $2}'
开发工具-git
- 知道rebase指令吗?
- 描述一下master和分支合并的过程?
- 假如你从master0创建一个分支,并commit C、commmit D,其他从在master上改动commit A、commit B,描述合并过程已经发生冲突如何处理。
参考:Git Community Book 中文版
这三个问题问的其实是同一个问题,合并分支的两种方法,只是我没用过rebase只用过 另一种,所以对方一步步诱导。
git rebase
指令用于把一个分支的修改合并到当前分支。
当master和分支上分别有人进行了修改,这就意味着两个分支各自前进了,它们之间分叉了。我用过的解决方法是:用pull
指令把master上的修改拉下来与我的分支合并,有冲突解决冲突,再commit;结果看起来就像一个新的“合并的的提交(merge commit);
但是,如果你想让分支历史看起来像没有记过任何合并一样,可以用git rebase
;
这些命令会吧你的分支里的每个commit取消掉(C和D),并且把它们临时保存为补丁(patch)(这些补丁放到“git/rebase”目录中),然后把分支更新到最新的master分支,最后把保存的这些补丁应用到“你的分支”上;
当你的分支更新后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。如果运行垃圾收集命令(pruning garbage collection),这些被丢弃的提交就会删除;
关于冲突:在rebase
的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase
并会让你去解决 冲突;在解决完冲突后,用git-add
命令去更新这些内容的索引(index), 然后,你无需执行git-commit
,只要执行:git rebase --continue
这样git会继续应用(apply)余下的补丁。
Java
- Java8的新特性?
参考:Java 8新特性终极指南
能够说出几点来就可以了。
- 增加了Lambda表达式
Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据;- 增加了默认方法
Java 8用默认方法与静态方法这两个新概念来扩展接口的声明。默认方法与抽象方法不同之处在于抽象方法必须要求实现,但是默认方法则没有这个要求。相反,每个接口都必须提供一个所谓的默认实现,这样所有的接口实现者将会默认继承它(如果有必要的话,可以覆盖这个默认实现)。- 引入了重复注解机制
使用注解的一个限制是相同的注解在同一位置只能声明一次,不能声明多次。Java 8打破了这条规则,引入了重复注解机制,这样相同的注解可以在同一地方声明多次。
计算机网络
- TCP与UDP的区别?
TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。
- HTTP是用的哪一个?
TCP
- 状态码302的含义?
HTTP 响应中包含一个状态码,用来表示服务器对客户端响应的结果。
- 状态码一般由3位构成:
1xx : 表示请求已经接受了,继续处理。
2xx : 表示请求已经处理掉了。
3xx : 重定向。
4xx : 一般表示客户端有错误,请求无法实现。
5xx : 一般为服务器端的错误。- 比如常见的状态码:
200 OK 客户端请求成功。
301 Moved Permanently 请求永久重定向。
302 Moved Temporarily 请求临时重定向。
304 Not Modified 文件未修改,可以直接使用缓存的文件。
400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized 请求未经授权,无法访问。
403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因。
404 Not Found 请求的资源不存在,比如输入了错误的URL。
500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常
数据结构与算法
- 稳定排序和不稳定排序的区别?
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法;
冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 快排稳定吗?
不稳定,不稳定发生在中枢元素和a[j] 交换的时刻。
- 找出数组中前K大个数?数据量很大,无法全部读入内存。
经典老题,很easy。
构造一个容量为K的容器,将数组输入到容器中;
存满K个后,每个新元素与容器中最小值 比较,保留较大值,舍弃较小值。完成。
用什么来构造这个容器?
红黑树、小顶堆。
描述一下小顶堆的交换新元素的过程?
小顶堆本质是一个二叉树,根节点为堆中最小值。当新元素大于根节点时,将两者交换,存入新元素,舍弃原根节点。然后调整二叉树使其重新构成一个小顶堆。
调整过程,将新元素与其左右子节点中的较小值交换;不断重复,直到其左右子节点均大于新元素。
- 有一个数组,其中只有1个数字出现了2次,如何找出来?
哈希。。。
如果数据量很大,有没有什么更好的办法?
。。。位运算。。。?
详细讲一下运算过程
(一通胡说)
如果是又2个数字出现了两次呢?(刚问完自己就说,算了这个太偏了)
其实这道题的经典原型是:一个数组中所有元素均出现2次,只有1个出现1次,找出这个数(孤单数问题 )。
异或运算可以将相同的元素消除,只需一次遍历即可解决问题。
他问的这两个问题都是这个题的变化题,但是我感觉他把题目条件搞错了。。。(不确定(⊙﹏⊙)b)
计算机图形学
- 学过计算机图形学吗?
没有(虾米鬼?)
开放性问题
- 平常玩游戏吗?
昨天接到电话以后了解了一下这家公司的业务,主要是搞安卓端的手游开发,大概了解了下他们公司游戏。但是他提到的几个游戏的名字我并不知道。。
- 还有什么问题要问我的吗?
经典三板斧:
我们公司的同事之间合作方式是怎样的?每个人单独完成自己的任务,还有以交流合作的方式?
公司内部有什么交流学习的机制吗?
公司对外有什么学术交流的机会或活动?
心得
第一次面试,尽量放松但还是紧张的,好多问题只能靠下意识回答,来不及细想。小公司问的问题都不难,很基础了,但是结束以后发现有几个问题因为口误答错了好像,缺乏临场经验啊。。。
关于项目,我简历上写的是大数据测试和java开发相关的内容,可能是因为跟他们业务不相关吧,完全没问。。。
与同学们交流,有已经拿到或者快要拿到offer同学,表示也是在经历十几次失败之后才逐渐积累出一些经验和稳住心态的能力。继续保持压力,但也不要急躁,相信大家都会有好结果的!