提前批
1面 20分钟
基本就问了些基础,范围比较广但难度不大;
2面 1个小时
a.linux:linux下面查找当前路径下文本内容含有某个字符串的所有文档
https://www.cnblogs.com/wangkongming/p/4476933.html
grep指令即可完成 -r表示递归 直接写字符串不需要加通配符
也可以用xargs配合进行查找
b.数据结构:快排算法的基准点如何选择
https://www.cnblogs.com/y3w3l/p/6444837.html
其实是快排的一个优化问题,在数组接近有序的时候,会导致快排的效率回归到o(n2)
一种办法是随机采用基准;
第二种办法是中值法,选中间,最开始,最后的三个数的中值作为基准;
c.数据结构:快排的递归部分能否优化
尾递归:在函数的最后执行,且无需对函数值进行进一步操作。
https://blog.csdn.net/gtzh110/article/details/48730131
https://blog.csdn.net/qq_25974431/article/details/79355095
减少了递归层次,编译器会对这种递归进行优化,在进入深层递归时候,不是在递归栈进行入栈操作,而是直接覆盖栈顶。
d.算法:一共20个车站,公交车可以选择在一个车站停或不停,但是前一站没停后一站必须停,对可能的结果输出
当时理解错误了,在终点站也是可以停或不停的。第一个站点也是可停可不停。现在面试结束了无法准确判断意思了。
所以在这种题目,可以先询问下只有1,2,3个车站的时候,分别会有几种,确定下题目的意思也可以找到思路。
面试官提示了后一时刻的个数可以由前一时态的个数确定。这个题需要设定两个初始参数,一个是当前以1结尾的方案个数,第二个是当前以0结尾的方案个数。下一时刻状态可以由此时刻推算,前一时刻为1,则方案数*2,前一时刻为0,则方案数不变,且产生的新的0,1个数可定(1应该是m+n,0应该是m),总数2m+n,故可以推算在20时刻的方案。
e.算法:1-n的数中出现1的个数
这个题其实应该先将一下最简单的思路,就是从1到n遍历并统计每个数中出现1的个数。
其次这个题目是可以通过对数进行划分进行化解的。把数划分为当前位,低位,高位。当前位不同的值依赖于高低位的值
https://blog.csdn.net/i_love_zxy/article/details/75579196
case 0: icount += iHigherNum *ifactor; break; case 1: icount += iHigherNum *ifactor +iLowerNum +1; break; default: icount += (iHigherNum +1)*ifactor; break; |
正式批
1面
1.linux下如何对文件中的某个字符串进行替换
https://www.cnblogs.com/nkwy2012/p/6365714.html
a.使用vim工具
:s/well/good/ 替换当前行第一个 well 为 good :s/well/good/g 替换当前行所有 well 为 good :n,$s/well/good/ 替换第 n 行开始到最后一行中每一行的第一个 well 为 good :n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good |
b.直接替换文件中字符串,不需要打开文件并且可以批量替换
perl命令
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c perl -p -i -e "s/shan/hua/g" ./lishan.txt ./lishan.txt.bak |
sed命令
sed -i "s/shan/hua/g" lishan.txt 把当前目录下lishan.txt里的shan都替换为hua |
2面
1.写一个树的类,包含删除,添加,查找等功能
还是应该在添加这步问一下面试官具体的输入。导致了我理解有点问题,把添加节点的操作想复杂了。这个地方的添加应该可以做一个给出父节点的方法即可。
然后应该去实现树常见的方法例如遍历,查找,删除,求树的深度等;
a.用数组的方式存下节点及对应关系,消耗的空间较大
b.用链表的方式存储(定义Node节点)
2.数据库二级索引
mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引
就是非聚族索引,叶节点仍然是索引节点,并保留一个链接指向对应数据块。
3.选出大于同类别平均值的sql语句
https://zhidao.baidu.com/question/1865528640676138587.html
a.使用关联子查询
select id from a where a.score>(select avg(b.score) from b where a.cate = b.cate);
b.先求出平均成绩,再进行查询
select id from a join (select id,avg(score) as avgcore from test group by cate ) as b on a.id = b.id and a.score> b.avgcore;