chinaunix:腾讯面试题
腾讯电商面试回来,发现我太菜了,缺乏技术深度。
笔试题感觉不难,但是做了之后总是发觉少点什么东西,深度!这是这场面试总结出来的。
凭记忆分享下笔试,面试题。大家一起解决,然后分享下该看什么书,可以解决这些“深度”问题。
1.内存池算法。
我就把前段时间看到的tcmalloc实现大概写了一遍。
Q:malloc怎么实现的?
A:通过brk,sbrk实现的。
Q:sbrk,brk怎么实现的?sbrk,brk怎么由内核态切换到系统(用户?)态的?
2.怎么定位内存泄露?
我写的是:
1.使用valgrind --这个东西从来没用过
2.mtrace
3.封装malloc,free函数的宏
5./proc/$pid/下的内存相关的文件,监控里面的vss(RSS?忘记是哪个了)的变化。确定是那个进程或线程的vss增加,然后走读进程或者线程的代码。
3.tcp为什么要第三次握手,time_wait是做什么的?
我写的是:
第三次握手是client对server的ack回应。time_wait是为了解决2msl的,什么什么幻影镜像。
4.strace什么什么cgi。 (cgi不会,所以只记得strace)
Q:strace怎么实现的?
A:ptrace
Q:ptrace怎么实现的?
5.ip如何在A,B地址间路由?
6.tcp/ip有几种状态,现场划出所有的状态转换图。
哪里记得这么多,都是netstat看到不懂的状态,然后翻书看状态转换图的。
7.有一张表,表结构如下
序列字段(主键,序列号),
后面的字段记不清了。
当这张表达到1000万数据量时,怎么优化,提高存储性能。
8.虚函数是怎么实现的?
虚函数的n年前研究过啊,当时还记得特意做实验破坏虚函数表来着。面试时就什么都不会了。
9.stl map是怎么实现的,时间复杂度是多少? --这道题,难道要通读<<stl源码剖析>>
10.还有一道服务器负载的题,不会,所以也没记住。
电商的面试官都这么牛,这还是俺第一次遇到这么有广度,有深度的面试,不过也特打击我了。请问各位大侠,该看什么书,才可以搞定这些问题。
其他部门也面试过了,问的问题都相对简单,就电商的特有难度,特有广度。
再补充一个:
11.release和debug版本程序有什么区别,debug信息存储在哪里(提示elf文件)?
1.内存池算法。
基本思想大家都懂:
一个大内存池, 若干不同block_size的小内存池, 以及被分配出去的block.
内存管理基本两个套路:
1, block头部预留内存用于记录元信息以及索引(freelist), 优点就是用户不用记录这个block当初申请的是多大的, 另外减少了一些归还block时的计算开销.
2, block无预留内存, 归还过程与分配过程一致, 需要用户提交block_size, 并且freelist需要外部分配内存对block进行管理.
Q:malloc怎么实现的?
1, 小内存分配有缓存, 但由于基于page的内存管理, 所以小块内存可能造成页内内存浪费, 即碎片, 另外程序占用内存提升即便释放也不会回降, 这是由于malloc内部缓存引起的, 需要与内存泄漏进行区分.
2, 大内存申请会用mmap可能造成缺页引起IO造成程序阻塞, 所以面临大内存频繁申请的需求应该考虑缓存内存块并重用.
具体malloc如何实现, 曾经也了解过, 但没有刻意的记忆, 既然特别清晰的认识我就不瞎说了, 只能说点上面工作中的经验.
2.怎么定位内存泄露?
1, 首先跑测试, 确认是内存泄漏, 以及泄漏的节奏如何, 是阶梯状泄漏还是陡坡状? 什么测试情景下泄漏, 明确涉及到的模块范围, 是否是大压力造成的任务堆积的误判? 反复压力, 如果内存只升不降, 基本可定位为内存泄漏.
2, 抱着测试结论, 先valgrind跑memcheck, 一般带--trace-original=yes --leak-check=full --log-file=xxx --verbose, 由于挂valgrind会导致程序跑慢, 相应压力下内存堆积也会严重一些, 属正常现象.
3, 使用valgrind排查内存问题, 最好保证程序支持优雅退出(释放所有资源), 并且必须先停测试压力, 待进程稳定后才关闭valgrind.
4, 查看valgrind输出报告, 先确认summary中没有error, 并通过多次valgrind执行, 比较summary中内存泄漏是否与执行时间有关, 并逐条check各警告, 结合测试结论与valgrind输出定位问题.
3.tcp为什么要第三次握手,time_wait是做什么的?
3次握手是为了初始化syn序列号,
1, synA
2, synB + ack A
3, ack B
time_wait是本端主动FIN的情况下发生的, 搞开发这个必须知道, 并且也应该知道linger直接RST可以避免这个问题, 这个状态简单说就是对端发FIN后, 本端处于的一个状态, 这个状态下的端口是没法重用的. 这也是我们的监听套接字为什么reuseaddr再bind的理由.
不过time_wait这个选项持续的时间会对短连接客户端程序不利, 因为端口可能无法重用造成无法继续新建连接, 所以一般线上机内核都要优化一些TCP参数.
4.strace
估计是strace让你跟php-cgi吧, 毕竟是作电商的.
5.ip如何在A,B地址间路由?
路由器配置有路由表, 查看目标ip属于哪个网段, 能找到对应的网段则看是否能arp到目标机, 不能就就往这个网段的默认网关丢.
路由当然就是基于ip&mask看看是否匹配某网段, 下面还会有一级一级的路由划分子网与聚合.
6.tcp/ip有几种状态,现场划出所有的状态转换图。
不就是上面说的3路握手,4路挥手吗.
7.有一张表,表结构如下
序列字段(主键,序列号),
后面的字段记不清了。
在线扩容啊, 称原先的mysql是A, 先开上9个mysql进程, 把最近一次库A备份导入, 然后全部设置slave of A同步A的binlog, 然后客户端(dbproxy)就可以切向这9+A共10个库了, 请求按哈希散列, 现在不同主键的操作会落在不同进程上, 可以把slave of都关掉了, 实际上即便不关闭slave of, 客户端在A上的操作对于其他9个进程来说也是不关心的, slave过去也没关系.
然后可以把共10个进程里无关数据(哈希不同)进行小批量多次删除(晚上操作), 最后给每个mysql进程上若干只读slave, 切一下dbproxy配置就可以了.
8.虚函数是怎么实现的?
多态, 取代了c语言的type+switch, 对象里有一个指针(我们通常认为在头部, 与继承结构古有关), 指针指向一个函数数组,里面记录的是派生类的函数地址, 调用基类指针时就可以根据这个函数数组就能调用的正确的实现.
9.stl map是怎么实现的,时间复杂度是多少?
红黑树啊, lg(n)啊, 树太深了一样慢的要死, STL又没提供哈希表,
10.还有一道服务器负载的题,不会,所以也没记住。
chinaunix:腾讯面试题的更多相关文章
- 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面 ...
- 腾讯面试题:10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。
腾讯面试题:10G 个整数,乱序排列,要求找出中位数.内存限制为 2G. 题目和基本思路都来源网上,本人加以整理. 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只 ...
- 算法题14 小Q歌单,牛客网,腾讯笔试题
算法题14 小Q歌单,牛客网,腾讯笔试题 题目: 小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌 ...
- 算法题16 贪吃的小Q 牛客网 腾讯笔试题
算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ...
- 腾讯笔试题:小Q硬币组合
腾讯有一道机试题: 大概意思是: 小Q非常富有,拥有非常多的硬币,小Q的拥有的硬币是有规律的,对于所有的非负整数K,小Q恰好> 各有两个数值为2^k,的硬币,所以小Q拥有的硬币是1,1,2,2, ...
- [js高手之路]javascript腾讯面试题学习封装一个简易的异步队列
这道js的面试题,是这样的,页面上有一个按钮,一个ul,点击按钮的时候,每隔1秒钟向ul的后面追加一个li, 一共追加10个,li的内容从0开始技术( 0, 1, 2, ....9 ),首先我们用闭包 ...
- php腾讯面试题(转)
一.PHP开发部分 1.合并两个数组有几种方式,试比较它们的异同 答:1.array_merge() 2.’+’ 3.array_merge_recursive array_merge 简单的合并数组 ...
- Linux fork函数具体图解-同一时候分析一道腾讯笔试题
原创blog.转载请注明出处 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (p ...
- 腾讯面试题,js处理1千万条数据排序并且页面不卡顿
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- LED驅動芯片對LED壽命的影響
5050年,領導作為一種新型節能光源在世界和中國有非常高的熱情和偉大的問題,不得不贏得市場占有率從室外到室內照明應用,中國也如雨后春筍般涌現在大型和小型LED照明企業.鑒于LED照明的主要原因是其促進 ...
- Android样式的编写格式
<?xml version="1.0" encoding="utf-8"?> <resources> <style name=&q ...
- java 自制类加载器的简单实现
package com.xiaomo.reflex; import java.io.File; import java.io.FileInputStream; import java.io.IOExc ...
- iOS 时区问题总结 NSTimeZone
基本概念 GMT 0:00 格林威治标准时间; UTC +00:00 校准的全球时间; CCD +08:00 中国标准时间 [来自百度百科] 夏时制,英文"DaylightSavingTim ...
- Java体系总结
一.Java SE部分 1.java基础:基础语法:面向对象(重点):集合框架(重点):常见类库API: 2.java界面编程:AWT:事件机制:Swing: 3.java高级知识:Annotatio ...
- Spark的日志配置
在測试spark计算时.将作业提交到yarn(模式–master yarn-cluster)上,想查看print到控制台这是imposible的.由于作业是提交到yarn的集群上,so 去yarn集群 ...
- c++11 : Variadic Macros(变长参宏)
Variadic macros are function-like macros that contain a variable number of arguments. Remarks To u ...
- Java学习笔记——JDBC读取properties属性文件
Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...
- 使用VisualVM查看Java Heap Dump
浏览Heap Dump 可以使用VisualVM浏览heap dump文件的内容,从而快速查看在堆中分配的对象.Heap dumps在主窗口的heap dump子标签页中显示.你可以打开保存在本地的h ...
- 【VS2015正式版下载】Visual Studio 2015 正式版开放下载 Visual Studio 2015 神key
说明: 微软定于2015年7月20日发布Visual Studio 2015正式版,目前其官方网站已经提供正式版本的下载. 可在https://www.visualstudio.com/en-us/d ...