华为CBG软开两面面经
一面
- 自我介绍,问了一下计算机网络,了解什么应用层协议。(http)
- 网络安全了解吗(我说上过课,手写过DES、RSA、Kerboros认证系统)
- 说了一下做的两个项目,担任什么角色。
- 项目用了什么框架说一下
- 了解Linux,进程间通讯用什么(文件、缓冲区、管道、socket还有一两个忘了)
- linux虚拟机内存机制,我没了解过,他说了一下,然后我感觉和java内存机制差不多我就说了工作内存和主内存。
- 存储碎片是什么(操作系统的知识,存储分配相关)。
- 是否了解JNI开发(不太了解,但是在看,然后下一个问题)
- 做过framework层开发吗(没做过,做的是应用层开发)
- 剩下的我忘了。。。基本上也是一些基础。
- 手写代码:模拟实现一个文件缓存系统,第一次从网络下载,之后从缓存读取,文件大小size大于10MB返回failure,文件格式是要求的那13种,否则failure。等等。面试官说可以写在纸上也可以在word上。
- 代码我就在纸上写了个大概,没写完。和他讲了一下就过了。
- 最后问了问有没有奖学金、比赛得奖我说没有。
- 等二面。
二面
- 上来一道算法题,然后让在word上写(不让在IDE上)。写了一会,最后有点写不出来(面试完理了理思路在IDEA上写出来了),然后就和他讲思路,他说思路正确。我巴拉巴拉了一会就说要在外面放一个数组来存当前行的数据之和,统计有几个,用动态规划的思路获取最大值,然后面试官就说先这样吧。
- 开始问项目。
- 问成绩,我给他看了看教务系统的成绩
- 问有没有奖学金、比赛之类的,我说参加过几次比赛,没奖。
- 有没有什么证书,我说考了一个中级软件设计师。
- 有什么问题要问。等三面。
二面算法题
public static void main(String[] args) { int[][] input = { {1,2,2,1}, {3,1,2}, {1,3,2}, {2,4}, {3,1,2}, {1,3,1,1}}; int count = 0;//count代表当前列有几块积木宽度和达到了i(1<= i <width) int max = count;//max存count的最大值 int width = 0; int[] dp = new int[input.length]; //存当前行的累加数字(积木宽度和), 用于和列数判断是否相等,相等count+1. int[] pos = new int[input.length]; //存各行数组的大小,用于遍历 for(int i=0; i<input[0].length; i++){ width += input[0][i]; } for(int i=1; i<width; i++){ count = 0;//积木宽度和为i的行数数量 for(int j=0; j<input.length; j++){//对每一行进行判断当前行积木宽度和是否与i相等 if(pos[j] < input[j].length){//第k行的数组元素没有遍历完 if(dp[j] < i){//第k行的累计数字 < 当前i,才加一块积木 dp[j] += input[j][ pos[j]++ ]; } if(i == dp[j] ){ //第j+1行的积木宽度和达到了i count++; } } } max = Math.max( max, count); } System.out.println(input.length - max); }#华为##校招##面经#