一些问题

高德:

1.数据库调优?性能调优?
系统性能,主要有两个部分,一个是吞吐量,一个是延时。
系统性能测试,首先要定义好延时的值,根据不同业务来。需要两个工具,一个工具用来制造高强度的吞吐量(loadrunner),另一个工具用来测量延时(wireshark)。不断提升吞吐量,看看系统是否顶得住,如果顶得住,看看系统延时。这样你就可以知道系统最大负载和系统响应延时。
定位性能瓶颈。
先看看是操作系统问题还是code的问题。主要查看cpu,io,内存,带宽。如果这些都不高,那么就是程序问题。
定位代码的瓶颈。使用profiler测试(oprofile),找出代码的性能瓶颈。
常见系统瓶颈,性能优化的几个策略。
空间换时间。比如各种cache,数据缓冲等。
时间换空间。比如huffman编码,算法会消耗时间,但是可以在网络传输中节省时间
简化代码。减少循环层数,减少递归,循环中少申明变量,少做分配和释放内存的操作(内存池),条件中多个条件的判定次序,尽量在启动的时候把一些事情准备好(比如资源的初始化等)。
算法调优。
代码调优。
字符串。谨慎使用字符串,不管是strcpy,strcat,strlen,还有字符串子串匹配都很消耗性能。最好还是使用整形。
多线程。多线程的同步和互斥是性能损耗,怎样少用锁。读写锁可以解决读并发的性能问题。线程也不是越多越好,线程间的切换和调度也是一个消耗。
内存分配。内存分配(malloc)容易产生碎片,可以使用内存池。同样还有线程池和连接池的使用,也可以提升内存的性能。
异步。同步损耗性能,异步可以提升性能,但是程序会变得复杂。异步会提升吞吐量,但是响应时间会增长,需要业务支持。
网络调优。
TCP调优。
tcp链接是开销的,占用文件描述符,会开缓存。所以设定一个Keepalive参数,如果之间没有数据传输,就认为tcp链接断了,回收资源。
系统调优。
I/O模型。select/poll/epoll
数据库调优。
数据库引擎调优
     1.数据库锁的方式。尽量减少锁,分库分表,减少一致性事务处理,比如nosql,达到分布式和高性能
     2.数据库的存储机制。
     3.数据库的分布式策略。
Sql调优
     首先要使用工具来察看sql的性能问题,比如sql query analyzer.其次看看服务器内存够不够,尤其是多表查询,很消耗内存。
     1.全表搜索。select * from user where lastname="tom".线性复杂度,性能差。有两种方法,一个是分表,将记录数降低;第二种是建立索引(索引是用B树来实现的),搜索复杂度是o(log(n))。
     2.索引。对索引字段最好不要再做计算,类型转换,空值判断,字符串链接等操作,会影响性能。
     3.部分结果集。使用top或者Limit等关键字。
     4.其它。不要select * ,而是确认的某些字段。


2.性能测试,如果多个线程去访问底层数据,如果有某些线程挂了,如何能够知道是哪一个线程挂了?我想说的是定义一个回调函数,如果挂了就通知。

3.有多个线程,如果某几个线程访问一个资源,这时候又有一个线程去释放,这样造成其它线程访问资源崩溃。怎么避免?我的意思是读写锁+条件变量

4.256个数据要去找到一个想要得到的数据,怎么搞?我说了二分,他说还有更优的,我就说哈希,但是我觉得还不是他们的答案。数组可以吗?

5.用户数量很多,产生的数据很多。海量数据如何找到你要寻找的数据,比如说要查找某个用户的某条关键信息。我说的使用分布式的方式去处理,最好是非关系型数据库,用map reduce的方式。

6.关于备份。如何备份海量数据,数据量太大怎么做的备份?涉及到数据库调优这块。我就是谈到了全局备份和增量备份,但是具体的细节我不知道怎么说。

7.还说到了map,红黑树

8.代码review要看那些?内存泄露有没有定位方法?


阿里巴巴
1.分布式了不了解?集群之间是如何通信的?
2.中间件了不了解,数据缓存,比如radius等...
3.写一个堆的插入
4.说一段你最得意的code.

百度
1.最得意的项目,最能体现你的价值的项目。阿里也遇到了。
2.项目经验的介绍,从high level 角度来说
3.性能优化的一些方法,如何找到瓶颈,他说在gdb里面有一个好方法,
4.最有挑战的技术是什么?我说木有
5.底层的泄露问题,忘了是啥,他问我怎么解决。我没遇到过说不知道。
6.性能优化,百分之三十是什么
8.如何做负载均衡
9.华为用的数据库是啥,在高德也问过过备份的方式
10.几种类型转换,c++ 中分别是啥,四种
11.三中数据共有,私有,保护,a中定义,b共有继承,c也是共有继承。在c可以访问那些数据吗,如何访问。
12.虚函数表是在运行时还是编译时建立。
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组。而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键。
13.this指针是在何时创建的?
14.写了一个快排。他问基准点,我说是第一个元素,他说什么情况下性能会最差。
15.构造函数里调一个函数,行不行。
16.虚基函数。这个在高德问过,可惜我没有做好准备。不能让这种事在发生。我这几天要把这些天面试的问题都找到答案,就算不是很深入也要有个答案!
17.你印象很深的几个性能优化点
18.说话速度太快了
19.为什么sll没有内存泄露


百度音乐
1.一个类包含一个整形和一个虚函数,求它的大小。
2.一个static的obj变量,定义在在一个函数里,它的构造函数和析构函数分别什么时候调?如果定义在函数外面呢?
3.一个结构体的一个实例。知道其中一个整形的地址,怎么知道这个实例的地址。
4.写一个单链表,去掉偶数的节点。
5.快排。
6.如何求第k大?从1到10000怎么用o(n)的复杂度,排序。
1)求第K大的思想来自于快排。它的思想如下:
一次排序后,如果当前元素index恰好为K,那么前K个元素都比它小,后面的元素都比它大。该元素就是所求。
如果index大于K,那么第K大肯定在左边,抛弃右边,再左边找即可。
如果index小于K,那么第K大肯定在右边,抛弃左边,在右边找即可。
2)对n个数进行排序,要求时间复杂度是O(n),空间复杂度是O(1)
运用数组来实现。定义一个数组count[n],初始化为0,记录每个数字出现的次数。然后按照顺序从数组开始输出(又多次的就输出多次)。
7.扑克牌54张,用什么办法随机的打乱。
8.线程和进程。什么时候用多线程什么时候用多进程?
9.网络编程。知道epoll吗?用epoll模型写一个tcp的server.
10.你最得意的一个code或者项目可以反应你的特点。
11.一个多线程的项目。
12.一般多线程访问数据怎么做?如果一个数据是访问多但是写的少,不用锁怎么做?
13.跳槽的原因

汇通天下
1.单例模式
2.线程池的实现,内存池的实现。内存如何动态的分配?
3.优点是说话比以前慢,也走心了。缺点是,没抬头,显得不够自信
4.简历还显得单薄,要丰富自己的经验,注重架构方面的经验
5.要求php,自己挑战较大




 


 


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值