2017实习面试准备
面试
- 面试题 《程序员面试宝典》;算法题
- 数据结构 《王道书》 快速排序
- c/c++ 总结 《C编程专家》
- 加密算法 《系统安全》
公司调研
- 了解公司(或该部门)的产品
生产什么样的产品,怎么生产,如何盈利?
- 了解公司的
企业文化
(在职或以往的员工)
- 了解公司的
竞争对手
(准备相关提问)
- 了解面试官
项目提问
问题 |
中新 |
同洲 |
拍牌 |
863 |
SDN |
介绍一下 |
|
|
|
|
|
最具挑战性的方面(最难的bug) |
|
|
|
|
|
学到的东西 |
|
|
|
|
|
如何影响道其他人 |
|
|
|
|
|
碰到过的冲突 |
|
|
|
|
|
犯过的错误 |
|
|
|
|
|
研究生项目
1. 863
- 调研工作:分布式文件系统的选定;平台架构的选定;搭建;参考美国能源网的技术搭建
- 分四层:1. 表示层,用户交互,SDN交互;2. SDN,添加了SDN,带宽预留、流量监控、SDN安全(防火墙);3. GridFTP传输层(UDT协议改进,传输优化,内部分块!)4. 底层资源(存储服务器、计算服务器)
- 每天50T/d, 万兆网络的情况下,可达成6-7Gpbs (网络时延在80ms,丢包率0.2%)
- UDT设计目标是支持高速广域网上的海量数据的传输,完全建立UDP协议之上实现可靠性传输和拥塞控制。
- 模拟工具 TC
- SDN(软件定义网络)是一种新型的网络设计方案,它通过对网络设备的控制层和转发层的解耦实现网络和网元的集中化管理。
- DPDK(netmap)
- huge table page(巨页); UIO(Userspace I/O); CPU affinity; 采用轮询模式驱动; 其他(内存池、环形缓存等)
- 未做socket层的协议处理; 轮询代替中断; 避免了数据核心态到用户态的拷贝; 绑定核心,避免了线程切换的开销; 避免了系统调用的开销; 使用了Direct IO技术,让PCIe空间直接映射到缓存
- 评价:已发展成为SDN和NFV( Network Function Virtualization )的关键技术; 纯DPDK提供的是原始数据包; 底层用dpdk做转发,上层用虚拟机做包处理; 同开源项目 netmap 类似,并不是实现一个用户态的协议栈,主要用来做包处理
- 比较
- 兼容性方面netmap较好 需要修改很少的驱动程序代码(500行); Linux、windows都已支持
- 性能方面 —— DPDK较好; 对网卡、CPU等有一定的要求 Intel 系列的支持很好
- 学术研究方面 —— netmap较好;自2012年,都会有基于netmap框架上的paper
- 工业界方面 —— DPDK较好; 有对应的商业公司的支持
2. 国拍
网络流量记录审计系统
- 高速网络环境下的截包(四条线路,但线路流量仅1Gpbs),截包软件, netsniff,开源工具,分析源代码,添加部分实时流量信息的展示
- 数据分析,主要是针对业务来的
- 非法流量统计信息
- 合法流量统计信息
- 普通意义上的,端口信息流量信息统计、验证码请求次数、非法请求次数、https请求次数等等,loadbalance设备丢包现象
- 特定问题:验证码丢失(电信丢包、LoadBalace丢包、验证码服务器丢包)、LoadBalance
- 敏捷快速开发,给了3个月,其实还包括其他项目部分,如DDoS平台的搭建
- 协商需求、协商架构
- Radware、华为、绿盟三台DDoS机器测评
3. SDN研究
工作情况
1. 中新软件
起点中文网信息监测系统“信息统计&报警”模块
具体来说是两个模块
信息统计模块
- “网络爬虫”模块的针对网址统计关键字并存入到mysql数据库中,而信息统计模块则需要针对B表内统计好的网址及关键字进行分类与切割,统计出以每个bookid为的关键字信息,警报级别等其他相关信息,并存入另一张表中
- 功能简单,但是面对的需要统计的数据级别是亿级(一般为1-2亿,若再超出了,数据库维护那块会做表的切割)
- 程序性能优化方式
- 索引的添加及取消
在需要经常进行范围搜索的列上建立索引,比如统计时间戳,用timestamp,bookid 在不经常检测所的地方则去掉索引
- 查询语句的优化
WHERE字句将索引放在最前面,使用LIMIT,以减少查询结果返回的时间
参照每次返回结果所花的时间,动态修改查询语句LIMIT的数,设定一个时间阈值,记录平均检索一个bookid所需的时间,超过阈值则立马,将limit这是为最优的的值,若返回时间还是超过,则修改为初始值
- 调用mysql函数接口
mysql_use_result 和 mysql_store_result,详细说明
- 关键字统计 关键字的统计,开始是自己使用的链表,最后用的是哈希表了,JS哈希函数
- 存在的问题:
- 时间的界定问题: 在不同的机器上运行,网络的时延时(更新数据,返回数据等),以自己的为准
- 查询缓慢:多个模块在同时使用数据库
邮件报警模块
- 针对统计模块统计出来的数据,选取那些敏感关键字数超过阈值的记录,组织成文件, 并通过文件进行发送!之前是通过调用开源的第三方简单的SMTP通过system调用发送的
- 缺点
- 首先是GPL下的,对于商业用途的,怕担心以后会有影响
- 需要设定详细的配置文件,基本都会被邮箱当做垃圾邮件处理
- 支持附件的发送,多媒体文本的发送,不支持抄送密送等功能,安全传输,明文传输的(BASE64编码)
- 目的
- 做成一个独立的系统模块
- 提供几个内部公共的调用接口
- 主要内容
- 参考MSMTP的代码,熟悉MSMTP,MIME的邮件协议,阅读RFC文档,服务器,客户端的交互流程
- 文件的编码,多媒体邮件支持的格式,邮件编码
- 是否支持安全传输层协议,TLS,基于这个层之上的,另制定一个接口(每个邮箱都不一样),但这个都是固定的是基于20号端口的
- 组织邮件,最开始是通过建立一个临时文本文件的,后来改为直接在内存内组织文件,很大程度上减少了调用系统高调用所花费的时间,提高了效率(open_memstream)
- 守护进程,服务程序
- 改进
- 发送附件的大小收到限制,自己有一个解决方法
- 垃圾邮件避免那一块 —— 通过分析正常的邮件头,分析,基于是否有时间戳,自定义字段会设置一个内部ID
2. 同洲电子
中山市标清机顶盒
目的:08年软件完成,13年局方提出了新的要求
- 更换CA:底层驱动加密解密那一块
- 支持机顶盒股票功能:多媒体功能,包的解析那块
- 如家广告功能:开机广告,音量条广告,实现动态修改,游标广告等等
- 以前遗留下来的BUG
CA商务认证
公司没有给予ST5197平台的同方CA认证
- 独自出差北京一个月,完成集成功能,并通过商务认证,提供底层测试驱动库,库不一定是OK的,共同开发
- 同其他公司人员交流问题,有时候解决一个问题会很麻烦,但可以暂时的规避
- 解析数据流,分析协议
3. 美亚光电
4. 科大讯飞
提问系列
1. 面试
带着记事本去参加面试,这样把想问的问题记录在上面,面试时可作为参考
预先准备10-15个提问
- 真实的问题(自己确实想知道的)
- “你有多少时间是花在写代码上?”
- “整个团队有多少人?大家如何分工的?”
- ”现在这个团队面临的最重大问题是什么?”
- “做决策的流程是怎么样的?谁来做最后的决定?谁来给出决策?”
- “员工离职率或换岗率?”
- 有见地的问题(自己做过研究)
- “前段时间的新闻XXX,是XX在消费市场所采取的和XX对抗的举动吗?”
- “为什么XX会在这个产品中采用XX协议?是出于公关策略还是出于技术层面的考量?”
- “贵公司在利用开源软件的同时,你们最主要的顾虑是哪些?”
- 显示出兴趣的问题
- “尽管我没做过XX,但我很想学会如何XX,请问作为一名合格的员工,我需要哪方面的技能?”
- “我对你之前提到过的技术不太了解。你可以再详细解释一下吗?”
- “如何让您评价一下过去做过这份工作的员工,是什么因素导致一些人成功了?另外一些人却没有成功?”
2. 宣讲会
面试题
- 集合-金领简历
- 为什么离职?换工作这么频繁?
预备知识
1. 数据库简单知识
mysql默认端口号:3306
- 分表(水平分表)
- 数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。
- 一种是表锁定(myisam存储引擎),一个是行锁定(innodb存储引擎)
- 一个主表
ENGINE=MERGE
, 多个分表ENGINE=myisam
或ENGINE=innodb
链接
- 数据库查询语句的优化
- 一般情况下,
Select Count (*)
和Select count(1)
两着返回结果是一样的
- 假如表沒有主键(Primary key), 那么
count(1)
比count(*)
快
- 如果有主键的話,那主键作为count的条件时候
count(主键)
最快
- 如果你的表只有一个字段的话那
count(*)
就是最快的
2. 知识点
计算机启动流程:
1、加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备; UEFI
2、读取并执行第一个可启动设备内的MBR的Boot Loader(即grub等程序)
3、依据boot loader的设置加载Kernel, Kernel会开始检测硬件与加载驱动程序;
4、在已经驱动加载完后,Kernel会主动调用/sbin/init进程,而init会取得run-level信息;
5、init 执行/etc/rc.d/rc.sysinit 文件来准备软件执行的操作环境(如网络、时区)
6、init 执行run-level的各个服务的启动(script方式)
7、init 执行/etc/rc.d/rc.local 文件 → 用户自定义启动程序;
8、init 执行终端机模拟程序mingetty 来启动login进程,最后等待用户登陆
堆和栈的区别:
- 数据结构里面
- 内存结构:栈从高地址向低地址增长;堆从地址向高地址增长
B树,B+树:
定义,应用,MYISAM, InnoDB
http://blog.csdn.net/hguisu/article/details/7786014
B树是为了提高磁盘或外部存储设备查找效率而产生的一种多路平衡查找树。
B+树为B树的变形结构,用于大多数数据库或文件系统的存储而设计。
- 红黑树&&AVL树
http://blog.csdn.net/mmshixing/article/details/51692892
根节点是黑的;节点要么是黑的、要么是白的;叶子节点(null节点)也是黑的;一个节点是黑的,那么其孩子节点是红的;对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点
红黑树通过非严格的平衡来换取增删节点次数的降低,所以其插入效率更高!
其查询性能比AVL要低一点,但是插入和删除性能较高,所以对于对于大量的数据比较好!
map, set 比较好!!!!
- 著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块
- epoll在内核中的实现,用红黑树管理事件块
- nginx中,用红黑树管理timer等
- Java的TreeMap实现
- 红黑树:平衡二叉树,广泛用在C++的STL中。map和set都是用红黑树实现的
- 关联数组
- 进程间的调度算法:
http://blog.csdn.net/luyafei_89430/article/details/12971171
- 先来先服务
- 短作业优先
- 优先权:高优先权调度(抢占式和非抢占式)—> nice
- 高响应比调度算法((等待时间+ 要求时间)/要求服务时间)
- 基于时间片的轮转调度算法
- 多级反馈队列调度算法
- 进程和线程的区别:http://blog.csdn.net/linux12121/article/details/51786233
- 调度&拥有资源:进程——资源分配的最小单位,线程——程序执行的最小单位(调度)。 线程可以看做是进程内的一条执行路径
- 并发性:线程使得CPU更加有效
- 系统开销:进程拥有独立的地址空间,还包括一些数据包括数据表(用来维护代码段、堆栈段、数据段),创建和销毁的开销比较大。而线程,拥有独立的栈空间,但是共享数据段,彼此之间使用相同的地址空间,共享大部分数据,开销较
- 通信机制:IPC比较复杂;线程之间很方便,通过共享的数据结构
- 地址空间和其他资源:进程间的地址空间是相互独立的
- 安全性:一个进程崩溃后,对其他进程的影响较少
- 进程和线程如何选择:
- 是否需要频繁的创建和销毁,优先使用线程
- 需要大量的计算工作,切换频繁时用线程,耗时的操作使用线程可以提高应用程序的响应
- CPU系统效率,并行操作使用线程(C/S服务器端的并发线程想用用户的请求)
- 安全、稳定的话,选择进程;速度的话,选择线程! 如:SSH只能用多进程!!!一个线程挂了,这个进程就挂了
- 多线程、线程池的选择:
- 当服务端处理单个任务时间较短且所需处理任务量较大时。因为线程频繁地创建和销毁会造成服务器性能损耗。 频繁的创建和销毁时,选择使用线程池(C语言的网络爬虫) ,线程池
- 每一个任务是无状态的,前后请求没有关联
- Linux文件系统:
i节点(索引节点):文件的描述信息
软连接(指向文件的路径)、硬链接(指向i节点)
- 虚拟地址空间:(虚拟内存不一样)
1 每一个进程都有自己独立的地址空间,各不干扰,保证代码和数据的安全。
2 进程可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的内存。
3 可以在一个物理内存较小的主机上运行多个进程。
- 字符串匹配算法
https://wenku.baidu.com/view/e852f195cc7931b765ce15b5.html
KMP(前缀搜索) BM(后缀搜索) Horspool 自动机 自动计(bnfa_search.c)
NFA是非确定性的状态机,DFA是确定性的状态机。确定性和非确定性的最大区 别就是:从一个状态读入一个字符,确定性的状态机得到一个状态,而非确定性的状态机得到一个状态的集合。
http://blog.csdn.net/yukuninfoaxiom/article/details/6057736
- I/O模型
http://www.cnblogs.com/zhuyp1015/archive/2012/05/31/2529203.html
五种I/O模型请掌握,阻塞I/O,非阻塞I/O,I/O复用,信号驱动式I/O,异步I/O。
同步和异步关注的是消息通信机制(synchronous communication/asynchronous communication)
所谓同步是指,发出一个调用之后,在没有得到结果之前,该调用就不返回。但是一旦调用返回,其就返回结果
所谓异步是指,发出调用之后,这个调用直接返回,但不会立刻得到结果,而是在调用发出之后,被调用者通过状态、通知来通知调用者(或回调函数)
同步I/O操作:导致请求进程阻塞,不导致I/O操作完成
异步I/O操作:不导致请求进程阻塞
异步就是异步
只有同步才有阻塞和非阻塞之分,异步肯定是非阻塞的!!!
同步:执行一个操作之后,等待结果,然后才继续执行后续的操作。
异步:执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作。
阻塞:进程给CPU传达一个任务之后,一直等待CPU处理完成,然后才执行后面的操作。
非阻塞:进程给CPU传达任我后,继续处理后续的操作,隔断时间再来询问之前的操作是否完成。这样的过程其实也叫轮询。
(1)阻塞式IO,recv,read 等到有数据了才返回
(2)非阻塞式IO,设置描述符为非阻塞,其立即返回,但需要进程自己一直检查是否可读
(3)IO多路复用 --> 同步非阻塞,严格的来讲,是把阻塞点改变了位置(需要阻塞的检查时候可读)
(4)信号驱动IO
(5)异步IO
- select, poll, epoll
拉一个子线程去轮询、去死循环,或者使用select、poll、epool,都不是异步。
关于select, poll, epoll自己了解的并不多,因为需要轮询的文件描述符集合不大!
select:
1. 每次调用要将fd从用户到拷贝到内核态
2. 每次都得在内核遍历所有的fd
3. 可打开的文件的数目有限制
epoll 边缘触发、水平触发
http://www.cnblogs.com/yuuyuu/p/5103744.html
- mysql索引类别
http://www.jb51.net/article/49346.htm
- “反射机制”: 简单的说,就是提供某种机制,在运行时可以获得一些对象和类型的结构信息。
- “闭包”:闭包是一类特殊的函数。如果一个函数定义在另一个函数的作用域中,并且函数中引用了外部函数的局部变量,那么这个函数就是一个闭包。
- 网络内核代码
- c程序的调试(core)
- DDoS攻击
- HTTP慢速攻击
- slow header
HTTP协议规定,HTTP Request以\r\n\r\n(0d0a0d0a)结尾表示客户端发送结束,服务端开始处理。那么,如果永远不发送\r\n\r\n会如何?Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端
- slow body
在POST提交方式中,允许在HTTP的头中声明content-length,也就是POST内容的长度。在提交了头以后,将后面的body部分卡住不发送,这时服务器在接受了POST长度以后,就会等待客户端发送POST的内容,攻击者保持连接并且以10S-100S一个字节的速度去发送,就达到了消耗资源的效果
- SSL 攻击
机密性(密钥加密)、可靠性(认证、证书)、完整性
Renegotiating机制让攻击者可以在一个TCP连接中不停的快速重新协商
- UDP Flood Attack攻击
也称为UDP淹没攻击,当不存在UDP端口时,会产生一个“目的地址无法连接” ICMP报文 相关信息
- C++ (C专家)
- 常见协议的端口
https(443) -- 三次握手、四次挥手详细解说
smtp(25)
mysql(3306)
- 网卡缓冲区(重要), 网络数据包发送接收全过程, 网络数据包收发流程,流量控制&拥塞控制, NAPI,
net.ipv4.tcp_mem=111 222 333
限制一个协议的总体内存用量 参考
- 强弱类型
- 结构体(struct、union)的sizeof,结果只可能是最大项类型的整数倍(有效项的整数倍),数据项只能存储在地址是数据项大小的整数倍内存位置上,
# pragma pack(n)
参考
- ABCD类地址 CIDR
- HTTP2.0 二进制帧,多路复用,请求优先级,流量控制,服务器端推送以及首部压缩等, HTTP前世今生 -- head of line blocking; 连接无法复用,websocket--允许用户在浏览器中实现双向通信,实现数据的及时推送,如在线聊天室(html5 应用);
- 幂等性:在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
- 英语简历、英语面试,王道书必须了解!数据结构、操作系统、计算机网络、安全的加密算法、SDN常问题目!Shell编程
- 简历里面提到的肯定都要会,最重要的是《程序员面试金典》一定要多练习!学些!明天搞一天那个!自己的笔记
- 用英语介绍一个你做过的项目,用英语自我介绍,英语简历
- 一些基本的安全类算法
- sed工具和gawk工具,shell知识复习下
- 进程间通信方式,彼此的特点,自己的总结
- 拓扑中毒是什么?
- 静态CDN
- 网络安全
- 修改系统/用户的最大文件描述符和系统上限,
ulimit
, /etc/security/limits.conf
, /etc/profile
- fork函数说明链接
- TCP状态转换,为什么是3次握手,4四次挥手
- AIMD拥塞控制算法,加性增加,乘性减少!
- B树、B+树、MyISAM、InnoDB
- MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
- 数据库隔离机制 ACID、隔离级别(读未提交、读已提交、可重复读、串行化)
比赛
华为网络技术大赛
- 华为软件精英挑战赛: 视频服务器部署问题,n个节点的网络拓扑中,任意两个节点之间都有一定限制的带宽以及费用,n个几点当中,有m个消费节点,消费节可以理解为用户,也就是对在线视频带宽有要求的,m个消费节点对应有m个不同给的需求,如果将若干的服务器附属在n个节点中使得在满足各个消费节点的总带宽需求的情况下,总费用最少(费用包括,任意两条线路之间的带宽,线路的租用费用cost,视频服务器的cost),复赛的话规模变大了,视频服务器有种类的区别(我把题拆解为两个部分)
- 消费节点是确定,视频服务器是不确定,在确定视频服务器之后,其实可以抽象为图论里面的一个最小费用最大流的问题!只不不过是多源多汇节点的情况!在这种情况下,我可以算出最少cost值的(增光路径、剩余网络、残留网络) 使用的是SPFA, ford算法
- 点怎么选择呢?暴力出奇迹吗…… 简单的分支裁剪,其实说白了就是排序尝试! 对节点根据它的出度、费用来计算一个权值,然后排序,尝试(中间加一些条件进行裁剪)
- 粒子群算法,一个粒子算一个可行解,解是一个向量(表示视频服务器的位置),然后最开始通过简单的聚类的算法对节点进行分类(k-means)算法,敲定了10个解,每个解其实都会对应一个cost值,然后每一次迭代的话,对应会有一个全局最优值,在下一次迭代的时候,通过更新公式,更新每个粒子,公式是根据全局最优的值来计算的,就这样一步步迭代,指代全局最优解连续十次没有更新那就算找到了解!
网络技术大赛
- 对网路感兴趣,面向是网络工程师、网络架构师、产品经理!
- 思科、华为的网络工程师的证,对网络协议比较熟悉,临场应变能力(个人答辩),ppt展示 出一个数据中心的解决方案,从设备的选型,技术的选型来看!安全、容灾备份、网络拓扑、核心交换、聚合交换机、边界交换机等等! 网络架构方案、存储方案、安全方案、计算资源方案、技术选型docker、haddop、openstack、spark技术等!SDN………… 计算、存储、网络……
黑客马拉松比赛
- 做了一个图片加工的产品opencv,商汤科技的库!
实习
- 数据挖掘的工作,目前做的并不是算法类的研究,而是数据的整合!企业QQ、营销QQ、QQ分析等很多产品融合到一起!TDW数据仓库平台,mysql,hive, spark,数据源
- 了解业务,在了解业务之后才可能更多的去挖掘数据中的价值(基础研究岗),shell、python、spark编程! 数据的整合、提取、报表,统计PV、UV等的,数据转换率啊,高质量的例子和对象啊! 通过整合各个信息—— 电话营销,比如现在学英语,对不不对,认识乱打的!但时候潜在的个可能性的兑现个,然后将这些对象分配给那些王牌推销员,进而这样可以提高整个20%的成单率!复杂的模型!基于mysql, 基于hive的python编程,基于spark 的scala编程,shell调度任务!
为什么写博客!
CSDN日报,“建立自己的品牌”, 作为一名程序员,三种能力比较重要“编程;写作;英语”
编程题
- 双指针
- http://blog.csdn.net/zzran/article