[{"content":" 数据库原理与设计\n1、分析B+树、LSM树作为存储引擎数据结构的特点\nB+树：\n每个节点中的元素从小到大排列 对于每个非叶子结点，其左子树中的所有key都小于它，右子树中的key都大于等于它 所有的叶子结点都位于同一层 非叶子节点只存储key和指针 叶子节点存储data（带顺序访问的B+树还会存储一个指向相邻叶子节点的指针） 一个节点的大小为一页 LSM树：\n由两个或以上的存储结构组成 是一个多层结构，上小下大 每一层都是有序的 第一层在内存中，其他层在磁盘中 2、分别写出读请求（点查）和写请求（插入）访问上述对应数据结构时的访问流程\nB+树：\n读请求 访问根节点，二分查找 访问相应的子树，二分查找 重复步骤2，直到查询到对应的data 如果是聚集索引则结束；如果非聚集索引，则把得到的data当成key去聚集索引里查找data 写请求 若为空树，创建一个叶子结点，然后将记录插入其中，此时这个叶子结点也是根结点，插入操作结束。 针对叶子类型结点：根据key值找到叶子结点，向这个叶子结点插入记录。插入后，若当前结点key的个数小于等于m-1，则插入结束。否则将这个叶子结点分裂成左右两个叶子结点，左叶子结点包含前m/2个记录，右结点包含剩下的记录，将第m/2+1个记录的key进位到父结点中（父结点一定是索引类型结点），进位到父结点的key左孩子指针向左结点,右孩子指针向右结点。将当前结点的指针指向父结点，然后执行第3步。 针对索引类型结点：若当前结点key的个数小于等于m-1，则插入结束。否则，将这个索引类型结点分裂成两个索引结点，左索引结点包含前(m-1)/2个key，右结点包含m-(m-1)/2个key，将第m/2个key进位到父结点中，进位到父结点的key左孩子指向左结点, 进位到父结点的key右孩子指向右结点。将当前结点的指针指向父结点，然后重复第3步。 LSM树：\n读请求 在内存中查找（C0） 若未命中，则依次往下层查找 重复2步骤，直至找到 写请求 日志先行，既先插入操作日志 随后将新纪录的索引插入到C0（内存中） 当C0达到一定的阙值，数据顺序刷到C1并与之合并，以此类推 ","permalink":"https://jiesunn.github.io/posts/2020-08-05-%E6%96%B0%E4%BA%BA%E5%9F%B9%E8%AE%AD%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E5%B0%8F%E4%BD%9C%E4%B8%9A/","summary":"\u003cblockquote\u003e\n\u003cp\u003e数据库原理与设计\u003c/p\u003e\n\u003c/blockquote\u003e","title":"新人培训之数据库小作业"},{"content":" Linux操作系统\n1、是否能用管道做大数据量的通信，为什么？\n能，管道是在内核的一块缓冲区，由文件系统的高速缓冲区构成，虽然管道容量有限，但是合理分段的情况下可以较高效的传递大量数据\n2、写程序验证信号处理函数是否会被子进程继承\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include \u0026lt;stdio.h\u0026gt; #include \u0026lt;unistd.h\u0026gt; #include \u0026lt;stdlib.h\u0026gt; #include \u0026lt;signal.h\u0026gt; static void handler(int signum) { printf(\u0026#34;this signal is %d\\n\u0026#34;, signum); } int main() { // 设置信号处理函数 struct sigaction sa_usr; sa_usr.sa_flags = 0; sa_usr.sa_handler = handler; sigaction(SIGINT, \u0026amp;sa_usr, NULL); pid_t pid = 0; pid = fork(); if(pid == 0) { printf(\u0026#34;child\\n\u0026#34;); while (1) {} } else { sleep(1); printf(\u0026#34;father\\n\u0026#34;); kill(pid, SIGINT); // 发送信号 sleep(1); kill(pid, SIGKILL); } return 0; } 以上程序的运行结果是：\nchild father this signal is 2\n所以，子进程会继承父进程的信号处理函数\n3、分析cd命令是否会fork进程执行（需要写出分析过程）\n不会，cd命令会在shell启动时被加载并驻留在系统内存，因此不需要衍生出一个子进程\n4、关闭TCP连接时，为什么所绑定的端要处于TIME_WAIT状态2msl后才进入CLOSED状态，请解释TIME_WAIT状态的作用\n保证连接能可靠关闭：若对方在超时时间内没有收到ACK，则会重发FIN，而所绑定的端如果不等待2msl，则收不到重复的FIN；\n保证本次连接的数据消失：在某些极端情况下，新的TCP连接不会混淆数据包。\n5、使用python+gprof2dot/FlameGraph分析一个应用程序。分析程序的调用情况，找出耗时的代码块。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import time def foo(n): for i in range(n): pass def foo1(n): for i in range(n): for j in range(i): foo(j) def foo2(n): for i in range(n): for j in range(n): foo(j) def t(): time.sleep(0.001) if __name__ == \u0026#39;__main__\u0026#39;: foo(100) foo1(100) foo2(100) t() 1 2 python -m cProfile -o test_gprof2dot.pstats test_gprof2dot.py python -m gprof2dot -f pstats test_gprof2dot.pstats | dot -T png -o test_gprof2dot.png 得到的程序调用图如下，可以看到最耗时的是被调用了14951次的foo方法，其次是调用了foo方法10000次的foo2方法，再其次是调用了foo方法4950次的foo1方法，最后是1ms的sleep。\n","permalink":"https://jiesunn.github.io/posts/2020-07-31-%E6%96%B0%E4%BA%BA%E5%9F%B9%E8%AE%AD%E4%B9%8Blinux%E5%B0%8F%E4%BD%9C%E4%B8%9A/","summary":"\u003cblockquote\u003e\n\u003cp\u003eLinux操作系统\u003c/p\u003e\n\u003c/blockquote\u003e","title":"新人培训之Linux小作业"},{"content":" 构建安全的Web应用\nsql注入 下述表单提交，不知道用户密码也能登录成功\n成因：\n登录过程中进行数据库查询操作时，没有对参数进行检查或转义\n1 2 3 def get_user2(name, passwd): sql = \u0026#34;SELECT * FROM user WHERE name=\u0026#39;%s\u0026#39; and password=\u0026#39;%s\u0026#39;\u0026#34;% (name, passwd) return db_exec(sql) 修复：\n使用execute拼接sql，既对参数进行转义\n1 2 3 def get_user2(name, passwd): # 对字符串转义 return db_exec(\u0026#34;SELECT * FROM user WHERE name=%s and password=%s\u0026#34;, (name, passwd)) why：\nMySQLdb中对字符串进行转义，因此sql执行器不会去解析字符串\nxss攻击 下述表单提交后，重载页面就会弹出\u0026rsquo;xss\u0026rsquo;的框\n成因：\nindex渲染的时候没有对用户输入的数据做检查或转义\n1 2 3 4 5 6 def render(file_path, data={}): encoding = \u0026#39;utf-8\u0026#39; data = to_unicode(data, encoding) env = jinja2.Environment(loader=jinja2.FileSystemLoader(\u0026#39;templates\u0026#39;)) template = env.get_template(file_path) return template.render(**data).encode(encoding) 修复：\njinja2渲染模版开启自动转义（autoescape=True）\n1 2 3 4 5 6 7 def render(file_path, data={}): encoding = \u0026#39;utf-8\u0026#39; data = to_unicode(data, encoding) # 开启自动转义 env = jinja2.Environment(loader=jinja2.FileSystemLoader(\u0026#39;templates\u0026#39;), autoescape=True) template = env.get_template(file_path) return template.render(**data).encode(encoding) why：\n转义之后浏览器不会去解析html标签或js代码等，因此可以防止用户内嵌其他页面（如广告），或提交有风险的js脚本\ncsrf攻击 在攻击页面写入以下代码，若用户在此前已成功登录demo站点，则会自动向bob账户转账200\n1 2 3 4 5 6 7 \u0026lt;form id=\u0026#34;form\u0026#34; action=\u0026#34;http://www.demo.com/transfer\u0026#34; method=\u0026#34;POST\u0026#34; style=\u0026#34;display:none;\u0026#34;\u0026gt; \u0026lt;input type=\u0026#34;text\u0026#34; name=\u0026#34;receiver\u0026#34; value=\u0026#34;bob\u0026#34;/\u0026gt; \u0026lt;input type=\u0026#34;text\u0026#34; name=\u0026#34;amount\u0026#34; value=\u0026#34;200\u0026#34;/\u0026gt; \u0026lt;/form\u0026gt; \u0026lt;script\u0026gt; document.getElementById(\u0026#34;form\u0026#34;).submit(); \u0026lt;/script\u0026gt; 成因\n在transfer接口没有对请求做任何校验\n1 2 3 4 5 6 7 8 9 class Transfer(lib.AuthHandler): def post(self): receiver = self.request.get(\u0026#39;receiver\u0026#39;) amount = self.request.get(\u0026#39;amount\u0026#39;) if receiver and amount: amount = int(amount) name = self.session.get(\u0026#39;user\u0026#39;) db.transfer(name, receiver, amount) return self.redirect(\u0026#39;/home\u0026#39;) 修复\napp/home.py\n在访问表单页时记录当前的时间戳到cookie中，并在提交表单时校验ticket\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class Home(lib.AuthHandler): def get(self): user = db.get_user(self.session.get(\u0026#39;user\u0026#39;)) # cookie中添加一个时间戳，用session记录 t = str(time.time()) self.response.set_cookie(\u0026#39;time\u0026#39;, t) self.session.set(\u0026#39;time\u0026#39;, t) self.session.save() data = {\u0026#39;_user\u0026#39;: user} return self.respond(\u0026#39;home.html\u0026#39;, data) class Transfer(lib.AuthHandler): def post(self): receiver = self.request.get(\u0026#39;receiver\u0026#39;) amount = self.request.get(\u0026#39;amount\u0026#39;) ticket = self.request.get(\u0026#39;ticket\u0026#39;) # 检查正整数 if receiver and lib.check_int(amount): amount = int(amount) name = self.session.get(\u0026#39;user\u0026#39;) # 检查ticket time = self.session.get(\u0026#39;time\u0026#39;) if lib.check_ticket(time, ticket): db.transfer(name, receiver, amount) return self.redirect(\u0026#39;/home\u0026#39;) common/lib.py\n相关检查\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 检查正整数 def check_int(value): try: value = int(value) if value \u0026lt; 0: raise except: return False return True # 检查ticket def check_ticket(time, ticket): if time and time + \u0026#39;haha\u0026#39; == ticket: return True return False templates/home.html\n在表单中增加一个ticket，ticket由在cookie里记录的时间戳生成\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 \u0026lt;input type=\u0026#34;hidden\u0026#34; name=\u0026#34;ticket\u0026#34; id=\u0026#34;ticket\u0026#34; value=\u0026#34;\u0026#34;\u0026gt; \u0026lt;script\u0026gt; function getCookie(name) { var cookieName=encodeURIComponent(name) + \u0026#39;=\u0026#39;; var cookieStart = document.cookie.indexOf(cookieName); var cookieValue = null; if (cookieStart \u0026gt; -1){ var cookieEnd = document.cookie.indexOf(\u0026#39;;\u0026#39;, cookieStart); if (cookieEnd == -1) { cookieEnd = document.cookie.length; } cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length,cookieEnd)); } return cookieValue } document.getElementById(\u0026#34;ticket\u0026#34;).value = getCookie(\u0026#39;time\u0026#39;) + \u0026#39;haha\u0026#39;; \u0026lt;/script\u0026gt; why\n攻击者要求用户访问demo站点时虽然可以携带cookie，但攻击者并不能获取cookie，所以无法生成有效的ticket\n","permalink":"https://jiesunn.github.io/posts/2020-07-28-%E6%96%B0%E4%BA%BA%E5%9F%B9%E8%AE%AD%E4%B9%8Bweb%E5%AE%89%E5%85%A8%E5%B0%8F%E4%BD%9C%E4%B8%9A/","summary":"\u003cblockquote\u003e\n\u003cp\u003e构建安全的Web应用\u003c/p\u003e\n\u003c/blockquote\u003e","title":"新人培训之Web安全小作业"},{"content":" 三面面试官口头offer\n22号北京现场面，真的好累，脑袋都是懵的，可能记录不全。\n一面 - 45分钟 简历：\n项目相关（bala了大半时间） 说说mysql索引 为什么mysql索引要用b+树 索引最左匹配 索引失效情况 进程、线程、协程 进程间通信 共享内存与信号量的优缺点 分布式锁 限流算法 算法：\n手撕lru 手撕一维dp 二面 - 一小时 发散：\n为什么用协程 说说用户态和内核态 解释一下中断 解释一下缺页 说说换页算法 说说虚拟内存 redis数据结构和底层实现 redis过期策略 redis持久化 fork阻塞 布隆过滤器 cgi和fastcgi 算法+场景：\n手撕二维dp 敏感词过滤（字典树） 大文件中关键词搜索（hash取余切割文件、维护热频词堆） 高并发秒杀场景设计（先来先得设计、一天内平均发放设计） 三面（C++）- 半小时 自我介绍 跨域问题 说说websocket PHP7新特性 opcache 比较一下PHP和golang 框架对比 框架设计 数据库设计 缓存设计 聊人生 面试官主要是搞C++，面了我半小时突然说要换个人来\u0026hellip;\n三面（PHP）- 一小时 自我介绍 session和cookie 安全策略 xss攻击+解决方案 PHP内存管理、垃圾回收机制 opcode 12306抢票场景设计 摇一摇抢红包场景设计 聊人生（不知道为什么还聊到了鸟哥hhhh） 问题基本就是这些，聊完人生后突然跟我介绍起了他们部门的业务方向，问我感不感兴趣，说刚好还差一个hc就决定是我了，然后加了微信\u0026hellip;\n后记 感受就是虽然从下午两点半一直到七点半才结束，面试加等待持续了五个小时很累很累，但是百度面试体验真的一级棒呀！\n每个面试官都很认真的在听你说话，二面说一个思路的时候我脑子里是想的清楚的，说出来就不太清晰，然后面试官还是很努力的在了解我的思路想法，最后还是捋清楚了。三面聊人生说到一件颇为伤感的事，面试官还安慰我舒缓气氛，呜呜呜真的太好了。\n希望hr面顺利，许愿offer🙏\n更新：\n这应该算是我最期待的一个offer吧，可等它真的来了，我又拒绝了。\n从找实习开始就与百度兜兜转转，还是无缘，可能以后会再遇见吧。\n","permalink":"https://jiesunn.github.io/posts/2019-09-22-%E7%99%BE%E5%BA%A6%E9%9D%A2%E7%BB%8F%E7%A7%8B%E6%8B%9B/","summary":"\u003cblockquote\u003e\n\u003cp\u003e三面面试官口头offer\u003c/p\u003e\n\u003c/blockquote\u003e","title":"百度面经（秋招）"},{"content":" 一切皆看缘分\n前言 前天收到的面试邮件邀请。\n一面 - 50分钟 19号的一面电面，面试官很明显的广东口音，hhh还挺萌捏\n简历+发散：\n自我介绍 挑一个最有亮点的项目讲讲 进程、线程、协程的区别 swoole协程与golang协程对比 用协程一定比用线程效率高吗 redis list的底层实现 说说对称加密和非对称加密 为什么自己实现加密，不用https 说说mysql的优化经验（index_merge） 说说mysql索引 组合索引 说说实习公司用git的开发流程 算法：\n如果一个文件每一行是一个用户id，求用户id频率最高的top10？时间复杂度是多少？（hash表+小顶堆） 上面继续，如果文件非常非常大，远大于内存呢？（切割+归并） 怎么用数据结构实现LRU，并使得查找与删除时间复杂度为O(1)？（双向链表+hash表） 上面继续，如果不是LRU，按访问次数删除呢？（双向链表+两个hash表） 上面再继续，怎么减小交换？（双向链表+三个hash表） 难度还算好吧，主要是针对简历提问，所以简历每个点都必须弄明白。 全程50分钟，结束的时候面试官问了一下意向工作地点，然后说通过的话五到七天会有hr联系约二面的技术面，但是没让我提问，顿时心里一咯噔。\n二面 - 1小时 23号约的面试，24号二面视频面\n自我介绍 说说index_merge 怎么建表建索引 组合索引命中问题 where和order by中的字段建组合索引会提高查询速率吗？为什么？ 写一下堆排 说一下PHP的内存管理机制 如果一个网页打不开，怎么排查？ 如果ping的通但是网页打不开，怎么排查？ 一个进程很卡，怎么排查？（cpu、内存） 如果内存是8g，进程占了7g，你有实锤说明是内存瓶颈吗？（内存颠簸） 为什么用迅雷比普通网页中的下载要快？（我说p2p） 除了p2p呢？（多线程分片） 为什么用nginx做负载均衡，不直接通过dns域名映射不同的ip？（负载策略、灰度发布） 如果你是你们公司的网管，你要怎么防止公司内员工访问某个网站？（网关层、路由器层） 你知道session的底层实现吗？ get、post的安全问题（我说如果是http，没有实际的差别，都可以抓包获取） 那除去抓包和旁边有人看着你输入url外，还有什么安全性的不同吗？（浏览器历史记录、搜索引擎、盗链） 二面的问题十分不常规，开放性问题很多，需要对操作系统、网络、数据库等整个体系有比较完整的了解。\n最后说通过的话5个工作日内会有hr联系，叫我保持手机畅通\n后记 之后又经历了hr面、offer call，总算是收到了录取邮件。\n部门是公共支持部门，听说“钱多事少”，对于我而言又算得上是“离家近”，而且广州这座城市我也的确很喜欢。一切都表明这似乎是最好的选择，但又或许只是“似乎”。\nanyway，三方也交完了，在学校待着着实无聊，于是又申请了提前实习\u0026hellip;\n","permalink":"https://jiesunn.github.io/posts/2019-09-19-%E7%BD%91%E6%98%93%E4%BA%92%E5%A8%B1%E9%9D%A2%E7%BB%8F%E7%A7%8B%E6%8B%9B/","summary":"\u003cblockquote\u003e\n\u003cp\u003e一切皆看缘分\u003c/p\u003e\n\u003c/blockquote\u003e","title":"网易互娱面经（秋招）"},{"content":" 平平淡淡才是真\n一面 之前有问过组内以前转正的同事，听说是10月~11月号转正答辩。便想着应该也不急吧，先准备着其他的秋招。\n结果没想到老大上个星期找我说是要我走提前批，于是转正就提上日程了。\n自我介绍 cookie和session 分布式存储session TCP三次握手 TCP如何保持长连接 操作系统的存储类别（几级缓存、寄存器、内存、外存） 操作系统什么时候会出现死锁 windows和linux的区别 知道几个虚存管理的换页算法？（FIFO、LRU、CLOCK） 在实际开发中有没有用到或者借鉴到换页算法（维护百万级用户在线状态） 常见的反爬虫方法 ajax跨域问题 Golang和PHP各自的优缺点 PHP中有哪个数据结构用到了堆 堆排序、构建堆的时间复杂度、调整堆的时间复杂度 mysql用索引和不用索引的查询时间复杂度（n, logm^n） innoDB的特性 用最少的正方形填满长a宽b的长方形（二维dp） redis集群哈希槽 redis的灾难宕机恢复 redis设计模式的弊端 MVC的优点和缺点 用docker进行微服务架构的优势 面了有50分钟吧，面试官小哥超级友好，面试体验一级棒！\n二面 一面后没多久二面就开始了，二面的面试官刚好也是我实习二面的面试官。\n他说实习时候问了挺多了，就随便聊聊（还可以这样？），然后就真的随便聊了下。\n实习感受 自我成长 最有成就感的事 对小米的认知 部门现存的问题 物质与精神 职业规划 语言的选择 诸如此类吧，具体有些问题也记不清了。\n后记 老大说这就是走个流程，然后给我发了口头offer，说是之后还要跟我谈一下后续的事。\n所以，未完待续？\n更新：\n评级出来了是个sp，同事老大也都很好。但是前后思虑了很久，还是决定离开了，一种怅然若失的感觉，毕竟工作了近1年，还是蛮舍不得的。\n部门的大Leader知道我要走还特意找我谈话，在此之前老大也为此找了我好几次，我是真的没想到部门及老大对我这么看重，不知道怎么表达感激之情，只好说句：江湖再见！\n","permalink":"https://jiesunn.github.io/posts/2019-08-27-%E5%B0%8F%E7%B1%B3%E9%9D%A2%E7%BB%8F%E8%BD%AC%E6%AD%A3/","summary":"\u003cblockquote\u003e\n\u003cp\u003e平平淡淡才是真\u003c/p\u003e\n\u003c/blockquote\u003e","title":"小米面经（转正）"},{"content":" 不亏是BAT之一，压力山大\n一面 其实28号下午接到滴滴hr电话后不久，百度电话就来了\u0026hellip; 当时在练车，就说不太方便，然后推迟到晚上，结果晚上并没有等来电话。 后来发短信去问，又说是第二天早上10点。\n本以为又会推迟一会吧，结果来的很准时。\n自我介绍 前端能力 MySQL的二级索引 数据库表的设计 索引的用处，为什么索引会快 Linux查看文件一共多少行，查看倒数200行（grep、wc、tail） 非对称加密和对称加密的实现过程（rsa、ase、token） git实现原理，用过的git命令 MVC的理解 Python爬虫用过什么库（requests） 感觉百度问的问题全看你能深入到哪，不会问一个具体的业务场景，所以最好要有比较全面的知识掌握。\n二面 二面是等了又等，终于等来。没有当即记录，具体的问题忘了很多。\n自我介绍 redis遇到的问题（hash冲突） hr面 or 后记 当时以为百度凉凉，结果入职小米的第一天下午又接到电话。 其实也不清楚是不是hr打来的，电话里又向我确认了一遍实习时间。 但总之也是没有下文了\u0026hellip;\n","permalink":"https://jiesunn.github.io/posts/2018-09-29-%E7%99%BE%E5%BA%A6%E9%9D%A2%E7%BB%8F%E5%AE%9E%E4%B9%A0/","summary":"\u003cblockquote\u003e\n\u003cp\u003e不亏是BAT之一，压力山大\u003c/p\u003e\n\u003c/blockquote\u003e","title":"百度面经（实习）"},{"content":" 没有做太多准备，十分lucky\n一面 滴滴的一面前就拿到了小米的offer，所以没有过多准备，甚至在当天才想起来下午还有一个滴滴面试…\n自我介绍 GET和POST的区别 content-type http状态码（200/404/500） SESSION和COOKIE in_array和array_key_exits 传值和传引用的区别 mysql的存储引擎 mysql事务 读未提交的影响（脏读、不可重复读、幻读、不可串行化） id设为主键，通过学号查找学生 mysql索引（主键索引、组合索引、前缀索引） 组合索引（命中） redis使用过的业务场景 redis数据结构 list与set的区别（set数据不重复，list双向链表，zset跳跃表） 你有什么要问的吗 这个实验室的小伙伴帮我录音了，听了一遍回答，感觉自己废话有点多…\n二面 一面完大概20分钟，二面面试官就加我微信准备二面了。\n自我介绍 校园助手负责的功能介绍（提到成绩计算从客户端重构至服务器端） 客户端处理和服务器端处理的区别（安全性） 数据同步脚本（吐槽了教务系统数据库的设计不合理） 为什么不合理（积攒已久的怨念全说出来了…） 如何确保同步数据的完整性（临时表、增量同步、学生反馈，面试官说还有更好的方式：回滚log、登录失败的自动反馈等等） 数据库的事务 mysql存储引擎 sql语句从输入到执行的过程 对称加密和非对称加密使用的算法（rsa、ase） redis常用的数据结构（string、hash、list、set、zset） 自动化报表系统数据库表的设计 说一下你设计的登录流程 CI框架的路由实现 权限表与用户表的外键约束 知道一个权限如何找出用户表中所有符合的用户（左外联接） TCP的三次握手和四次挥手 跨域是跨域名还是端口 两个栈实现一个队列 一共50个人，围一个圈，每三个人就剔除一个人，求出最后剩下的人 你还有什么要问的吗 整体来说，二面的面试官特别的慈祥… 我没答上来的问题，他就很开心的说，不知道了吧，要不要我告诉你（很皮） 恩…感觉挺有意思的一个人\nhr面 大概隔了一天吧，下午练车的时候打的电话。 感觉hr有点累，没有问我什么，就跟我确认了一下入职时间，然后说了一下薪资待遇。\n大概就是这样。\n后记 考虑到很多方面，最终还是拒掉了滴滴offer，秋招再见吧！\n","permalink":"https://jiesunn.github.io/posts/2018-09-25-%E6%BB%B4%E6%BB%B4%E9%9D%A2%E7%BB%8F%E5%AE%9E%E4%B9%A0/","summary":"\u003cblockquote\u003e\n\u003cp\u003e没有做太多准备，十分lucky\u003c/p\u003e\n\u003c/blockquote\u003e","title":"滴滴面经（实习）"},{"content":" 人生中的第一次面试，难免紧张\n一面 晚上10点刚洗完澡就一个电话打过来，面试官正在下班的路上… 因为洗澡前投递的简历，没想到会这么快，啥都没准备，只好硬着头皮上。\n一些基本情况 redis使用过的数据结构（string、hash、list、set、zset） redis list的数据结构（双向链表、计数器、void型的数据域指针） 为什么使用websocket，php不用swoole怎么实现 校园助手的数据库设计 大概就是这些，整体来说都是围绕者项目来讲的，电面的时长也比较短。 因为准备不充分，有些问题没有回答的很好，当时以为凉了。\n二面 第二天抱着忐忑的心情，没想到上课途中又来了一个电话，然后约了当天下午6点的面试。 二面是通过微信语音面的，群里有两个人，一个是昨天面我的，还有一个是今天的。\n自我介绍 redis的数据结构 redis两种set有何不同（都是不可重复的，zset会根据设置的权重进行排序） 正向代理与反向代理（扯到了负载均衡） 设计一个负载均衡的实现（权值轮询、ip_hash） 软负载和硬负载 mysql索引有哪几种（主键索引、组合索引、前缀索引） 组合索引的命中问题 使用索引的优缺点 内连接、左连接、右连接 ACID事务是什么，举个栗子说明（感觉表述的不是很清楚） linux命令，查看磁盘空间，查看cpu，显示匹配单词所在的行，文件无损合并无损拆分 冒泡排序和快速排序的不同 时间复杂度和空间复杂度的概念 常用的数据结构 队列和栈的区别 树的先序遍历和后序遍历 异步同步的区别 接口的幂等性 整体感觉还是基于项目提到的知识点来问的，可惜的就是准备还是不够充分。 感觉面试官偏爱数据结构，算法问到的不是很多，关于操作系统、计算机网络方便的问题基本没问。 还有，我面的PHP岗，竟然一个PHP相关的问题都没有问我。\nhr面 其实二面完的当天晚上9点30，一面的面试官就微信告知我面试通过。 可是当时沉迷学校的一个项目并没有看到，晚上12点才看到。\n第二天睡觉睡到一半，hr打电话过来了，大概问了一些实习情况，然后说明了薪资水平。 这里有一点挺尴尬的，我是在实习僧上找的实习，邮箱忘记填了，然后hr小姐姐问了我的邮箱…\n拿到的第一个offer，还是比较激动的。\n后记 经过陆陆续续将近一个月的实习试水面试，最后还是选择了去小米。一方面是因为比较感兴趣部门的业务，一方面也是因为面试官（后来才知道是组里老大）比较亲切。总之，保持激情保持学习，加油。\n","permalink":"https://jiesunn.github.io/posts/2018-09-20-%E5%B0%8F%E7%B1%B3%E9%9D%A2%E7%BB%8F%E5%AE%9E%E4%B9%A0/","summary":"\u003cblockquote\u003e\n\u003cp\u003e人生中的第一次面试，难免紧张\u003c/p\u003e\n\u003c/blockquote\u003e","title":"小米面经（实习）"}]