后端面试经验

1.写webserver的内容

webserver我是阅读《TCP网络编程》和《Linux高性能编程》学习的,其中最主要的应用就是:对多进程、多线程的学习;使用IO多路复用模型同时监听多个套接字;使用线程池机制和锁信号量来处理多任务。

具体使用的是reactor的模式,在面试的时候很重要的一个点是,面试官推荐我去学习NGINX的实现,契机是我说我了解这个,但是我只是知道这个是一个帮助写网络服务器的,具体是什么不知道,于是在面试结束去搜了一下,知道了它是使用reactor模式监听多套接字,能实现反向代理;资源请求的webserver,同时因为使用了reactor模式,io多路复用技术就像redis一样,少量线程就很高效。目前是打算后期看极客时间的nginx的课程继续学习。

2.TCP相关

这个在后边面试成功拿到鹅厂offer很有帮助,具体来说学习这个经历阶段比较多,从最开始考研的时候对计网知识的记忆性学习;到后来看趣谈网络协议了解了tcp的有连接本质上就是发收双方维护一定的数据结构;最后是在找实习之前通过学习CS144的大作业的lab,在实现的过程中对tcp的实现有了更深刻的了解。

收获1:比如tcp本身的连接,在实现中维护了TCP_CONNECTION TCP_SENDER TCP_RECEIVER,使用这些结构体来维护数据。

收获2:在实现时应用层和传输层是有字节流的,这里需要能读写,需要实现接口,然后具体实现时我们后续会用传输层这边的读写的内容。应用层的是测试会自动测试,然后这里存储就有一些内容,比如有不把数据读走的读。

收获3:在实现滑动窗口的时候,第一次的时候在移动窗口时使用的是把后边的数据复制到前面,基于queue实现的,但是发现效率不高,后续想到了数据结构里的循环队列,于是通过一个指针来代表队头,实际数据不真的移动,提升效率。

这里收获3是最大的,也是很重要的,对以前学过的数据结构的一个应用。

3.算法相关

一个是我在面数据分析的一个岗位时学到的

如果按组去划分,count,使用的是group by 某某某,然后having

要求去重就使用DISTINCT

在排序时使用order by

我当时的问题是order突然忘记怎么写了。

剩下的三个是我在面试的时候都直接写下来的,比较常规的题目,但是不是每个都做过

a.LRU缓存

我自己想的通过自制的链表实现,和hash

使用hash的set来存储具体的键,使用N来表示能接受的LRU的容量限制,在具体实现中,get能得到key对应的value,get的同时会把数据提到链表的头部,通过头部来表达数据的新旧访问关系;set首先要判断是否有这个值,如果有就把它放在最前面,然后更新值,如果不存在,要判断目前的数量是否大于等于N,如果不是,就直接放在队头,否则就去掉队尾的然后在队头插入。

b.深度遍历树

通过栈和递归的方式

树的深度优先遍历dfs,常见的形式是使用函数调用的递归方式,使用递归能实现,使用栈也能实现,递归在底层也是通过函数栈来实现的,所以树的深度优先遍历都是使用栈来实现的。

树的宽度优先遍历是通过队列来实现的。

c.判断环是否有圈

使用快慢指针或者用set

4.表达方面

这个是我在阅读《聪明人说话之前想的事》里学到的,在讲话的时候"先讲结论",先说对方想听的内容而不是表达自己想听的,在这种情况下要弄清楚什么是结论,比如对于tcp协议的实现,结论就是tcp本质上是双方维护一定的结构来表现出逻辑上的连接,本身tcp是没有一条物理上的连接的,这就是对于tcp协议实现有关的结论。

相关推荐
_日拱一卒1 天前
LeetCode:437路径总和Ⅲ
算法·leetcode·职场和发展
Yunzenn1 天前
深度解析字节前沿研究-Cola DLM第 04 章:Cola DLM 架构全景 —— 三层解耦的设计哲学
java·linux·python·深度学习·面试·github·transformer
AI周红伟1 天前
创业10年,张一鸣成长的2个基本方法论
面试·职场和发展
罗超驿1 天前
21.jdbc 学习笔记:从原理到实践的全流程梳理
java·数据库·mysql·面试
Mahir081 天前
Spring 全家桶常见注解全解:从入门到精通
java·后端·spring·面试·常见注解
折哥的程序人生 · 物流技术专研1 天前
《Java 100 天进阶之路》第32篇:Java常用工具类(Objects、Collections、Arrays深入)
java·后端·面试·求职招聘
kyriewen1 天前
写组件文档写到吐?我用AI自动生成Storybook,同事以后直接抄
前端·javascript·面试
绝知此事1 天前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树
五点六六六2 天前
你敢信这是非Native页面写出来的渐变效果吗🌝(底层原理解析
前端·javascript·面试
dayuOK63072 天前
AI内容创作工具的下一个战场:从“生成”到“全流程自动化”
运维·人工智能·chatgpt·职场和发展·自动化·新媒体运营·媒体