百度基础架构组-实习生面试(2016.08 java后台开发)
一、项目
1、Spring MVC与Struts2的区别:
2、MVC三层是如何工作的?比如:要访问一个Url?a=xx&b=xx,怎么找到相应的资源,怎么运算,怎么返回等?
3、数据库mybatis,如何优化的?加索引。
二、计算机网络
1、Http协议中GET与POST的区别
a) GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连。POST把提交的数据则放置在是HTTP包的包体中。
b) GET传递的数据长度有限制,POST方式在理论上是没有大小限制的,可以传输大量数据。
c) POST的安全性要比GET的安全性高。因为GET方式传输的数据以明文的形式出现在URL中。
2、Http协议的状态
(200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 )
a) 2xx(成功),表示成功处理了请求。
b) 3xx(重定向),表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
d) 4xx(请求错误),这些状态代码表示请求可能出错,妨碍了服务器的处理。
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。403 (禁止) 服务器拒绝请求。404 (未找到) 服务器找不到请求的网页。
e) 5xx(服务器错误),这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误。
三、Git与SVN的区别,Git pull、fetch、rebase、reset的区别
1) Git是分布式的,SVN不是。即每个开发人员从中心版本库上\服务器上check out代码后会在自己的机器上克隆一个自己的版本库。
这样,如果你被困在一个不能连接网络的地方,仍然可以提交文件,查找历史版本记录,创建分支。
2) Git分支和SVN的分支不同。Git是基于差异来管理分支的,其分支的代价极小,切换分支也极为方便和快捷。
3) git pull 相当于是从远程获取最新版本并merge到本地;git fetch 相当于是从远程获取最新版本到本地,不会自动merge;实际上使用git fetch更安全一些。
因为在merge前,我们可以查看更新情况,然后再决定是否合并。
4) git rebase?
5) git reset?
四、数据结构
HashMap内部是怎么实现的?拉链式结构
TreeMap 红黑树
五、算法
1、如何判断一个单链表中是否存在环(两个指针,一快一慢)
2、求Fibonacci数列的最快算法,最少时间复杂度是多少?
a) 迭代算法,O(N),需要借助O(N)的空间,最简单。
b) 递归,O(2^N),空间复杂度O(1),时间复杂度太高。
c) 矩阵乘法,最快,时间复杂度O(logN),但是计算比较复杂,不深入讨论。
3、求1-9999这9999个数字中含有多少个1? 分类,排列组合
4、都知道哪些排序算法(具体怎么实现)?手写堆排序算法,冒泡排序算法。
5、数组大小为N,元素取值范围为[1,N],统计每个元素出现的次数。
要求时间复杂度为O(N), 空间复杂度为O(1),可以改变数组元素。
六、Java基础
1、GC垃圾回收机制原理
2、== 与 equals区别
3、final关键字
4、short s1=1;s1 = s1+1;
七、操作系统
linux常用命令
八、前端
正则表达式、js、css块、html、bootstrap
九、IPC(中间件)
例如:spring mvc等,是将HTTP协议......
十、数据挖掘
聚类算法:如何优化?