面经

树的度:分支的个数
哈夫曼树:每次合并权值最小的2个树
哈夫曼编码:
为了尽量减少编码的存储空间,且保准每个字符的编码不互为前缀码。
将使用频率作为权值,构造哈夫曼树。
共用体:其中只有一个(最后一次被赋值的成员)成员保存在变量中。
模板偏特化:
static和派生的关系:
有权图的次最短路径
architecture
implement
approach
二叉树的镜像
写代码的时候要考虑到各种情况。包括NULL,只有一个结点,普通二叉树,二叉树所有结点只有左结点/右结点等。针对下面几种情况都要满足需求。

void MirrorRecursively(TreeNode *pRoot)
 2 {
 3     if((pRoot == NULL) || (pRoot->left == NULL && pRoot->right))
 4         return;
 5 
 6     TreeNode *pTemp = pRoot->left;
 7     pRoot->left = pRoot->right;
 8     pRoot->right = pTemp;
 9     
10     if(pRoot->left)
11         MirrorRecursively(pRoot->left);  
12 
13     if(pRoot->right)
14         MirrorRecursively(pRoot->right); 
15 }

泛型算法的find,没有找到则返回第二个参数,而不一定是end()
比较数组相邻元素时注意结束条件

for(int i=0;i<v,size()-2;++i)

size()返回的是unsigned,不会小于0

一个含有n个顶点和e条边得简单无向图,在其邻接矩阵存储结构中共有__个零元素
有n个顶点,所以有n*n个元素,2*e个非零元素(无向图,对称),所以有n*n-2*e个零元素.

static、const、virtual结合使用情况,以下几种可以么:
static void fun(){};
static void fun() const {};
static virtual void fun() const {};
static virtual void fun() {};
以上四种函数可以这样定义嚒? 为什么?

冒泡排序:

  • 从第1个数开始,每2个数比较后决定是否进行交换。
  • 复杂版的选择排序
for(i=0;i<n-1;++i)
  for(j=1;j<n-i;++j)
     if(a[j-1]>a[j])  swap(a[j-1],a[j]);

判断链表是否有环:
使用2个指针,第2个指针指向第头节点的后一个。如果有环的时候,第1个指针总有1次会和第2个指针相同。

已知树的节点个数,求树的高度
满二叉树的节点个数为:2^0 + 2^1 +….+2^h = 2^(h+1) - 1
完全二叉树的节点个数为:2^h ~ 2^(h+1) - 1

分治:分解成子问题——》解决子问题——》合并子问题

这么说是因为很多人其实在这些年的项目或是学习中有一些积累,但是在刚开始面试的时候完全感觉使不出力,就是有种你问的我都能讲上一点,但根本说不清楚的感觉。(往深了问自然是完蛋)

知识面或者或者说技术栈都是有宽度和深度的,我们要做的就是在短时间内提升宽度,抓住以往本身就熟悉或是感兴趣的几个点去深入。

我是认为知识的宽度可以很大程度上决定你能不能通过面试(通俗地说是可以讲清原理,不涉及横向对比和优化的方面)

一两个点的深度呢在保证你能通过面试的同时(尤其是你的点正好cover了对方部门的技术栈),并且还是影响offer等级的关键因素。(达到足够的深度,不只能说出原理,还能进行横向技术对比,纵向的延伸技术,优劣点及优化,或者在这个点写了几篇很透彻的博文,更厉害的同学甚至有相关的开源项目的参与与贡献)

剑指offer

数据库(最多的还是mysql,Nosql有redis)
索引(包括分类及优化方式,失效条件,底层结构)
sql语法(join,union,子查询,having,group by)
引擎对比(InnoDB,MyISAM)
数据库的锁(行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐观锁,以及加锁的select sql方式)
隔离级别,依次解决的问题(脏读、不可重复读、幻读)
事务的ACID
B树、B+树
优化(explain,慢查询,show profile)
数据库的范式。
分库分表,主从复制,读写分离。
Nosql相关(redis和memcached区别之类的,如果你熟悉redis,redis还有一堆要问的)
操作系统:
进程通信IPC(几种方式),与线程区别
OS的几种策略(页面置换,进程调度等,每个里面有几种算法)
互斥与死锁相关的
linux常用命令(问的时候都会给具体某一个场景)
Linux内核相关(select、poll、epoll)

项目经历
这个每个人的项目不同,覆盖的技术也不一样,所以不能统一去说。
这里的技巧呢,在下面也会详细说明。
无非是找到自己项目中的亮点,简历上叙述的简练并且吸引眼球,同时自己要很熟悉这个点(毕竟可以提前准备)
最好自己多练,就像有个剧本或者稿子一样,保证面试中可以很熟练通俗地讲出,并且让人听着很舒服。
实习经历
对实习所做的工作做一个总结,并且同样抓出亮点,搞懂内部原理,提前锻炼讲述的过程。
其他扩展技能(这个方方面面太多了,全部掌握基本上不可能,只是作为大家其他时间扩充技能的参考)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值