ieg后台开发实习

12.09,一面:

没问八股,问了下项目,手撕lru(在txt上),略了。

12.11,二面:

没手撕

redis集群,一致性hash问题等,还问了一些场景题,本人不了解真实代码怎么实现的,根据自己理解说了下,个人感觉问得比较开放。

ip协议路由

mysql中的两个引擎

cpp中,空类占多少字节,如果有虚函数又占多少字节

简单问了下docker

还问了ai相关的经验(?),因为本人做过目标检测和简单的rag项目,简单答了,感觉挺看重ai背景的。

12.18,hr面,聊天

12.20,意向
全部评论
【最新消息】进去干ai杂活了,此贴对传统后端开发没有参考意义
3 回复 分享
发布于 01-06 23:10 广东
接offer
点赞 回复 分享
发布于 01-12 21:41 河北
佬是把ai项目也写简历里面了吗
点赞 回复 分享
发布于 2024-12-29 11:54 江苏
年末问的简单点?
点赞 回复 分享
发布于 2024-12-21 21:34 陕西

相关推荐

05-10 00:10
中山大学 golang
发面经许愿过自我介绍进程和线程的区别?为什么线程会比线程快?进程中哪些资源是不共享的?共享的呢?线程中哪些资源是不共享的?共享的呢?为什么堆不共享,讲一下堆不共享的情况?协程知道吗?现在有100个进程,一个进程有10个线程,那么如果方法栈不共享的话是不是会有1000个方法栈,从协程的角度讲一下会有这种情况吗?讲一下为什么要三握手?http2.0和3.0的区别?http2.0和1.0的区别?讲一下Java目前版本的GC的一个过程?Redis和Mysql的区别?Redis是怎么更新的?Redis的数据如果删除失败了怎么解决?(从流程上解决)慢查询怎么找?讲一下之前实习的查询优化怎么实现的?讲一下具体怎么找到慢查询的?RESTFUL API的特点?(回答了域名是什么样的就写了什么)1t个整型数据怎么找中位数?(提示从快排的角度)算法题:LRU连续子数和答案:### **1. 进程和线程的区别?**进程是系统资源分配的最小单位,而线程是程序执行的最小单位。一个进程可以包含多个线程,线程之间共享进程的资源,比如内存空间、文件描述符等,而不同进程之间资源隔离,通信需要通过进程间通信机制。---### **2. 为什么线程会比进程快?**因为线程间切换的开销小,共享资源多,比如内存空间无需重新分配,而进程切换涉及到上下文切换、内存空间的重新加载等,代价更大。---### **3. 进程中哪些资源是不共享的?共享的呢?**不共享的有:内存地址空间、堆栈、全局变量等。共享的有:代码段、只读数据段、内核资源(如打开的文件、信号处理器)。---### **4. 线程中哪些资源是不共享的?共享的呢?**不共享的有:线程自己的栈空间、程序计数器、寄存器上下文。共享的有:进程的内存空间、文件描述符、全局变量、静态变量等。---### **5. 为什么堆不共享,讲一下堆不共享的情况?**其实堆在**线程间是共享的**,因为多个线程可以访问进程的堆区数据。但在**多进程中堆是不共享的**,每个进程有独立的虚拟地址空间,堆也各自分配,不会共享,除非通过共享内存机制显式实现。---### **6. 协程知道吗?**协程是一种用户态的轻量级线程,不依赖操作系统调度,由用户控制上下文切换。相比线程更轻,适用于大量并发但不需要多核并行的场景,比如高并发 IO 操作。---### **7. 有100个进程,每个进程10个线程,如果方法栈不共享,是不是有1000个方法栈?从协程角度讲有这种情况吗?**是的,如果线程不共享栈,那么确实会有1000个独立的栈。协程也是一样,每个协程也需要单独的栈空间,尽管更小,常见是几 KB,所以如果用协程实现相同数量,也会有近似数量的栈,只是代价更小。---### **8. 为什么要三次握手?**三次握手是为了确保双方都有收发能力:- 第一次客户端发起连接(SYN),- 第二次服务端确认并回应(SYN+ACK),- 第三次客户端再确认(ACK)。        如果没有第三次,服务端无法确认客户端是否能正常接收数据。    ---### **9. HTTP2.0和3.0的区别?**HTTP/2 使用 TCP,多路复用减少了 TCP 连接数,但仍受 TCP 队头阻塞影响;HTTP/3 基于 QUIC 协议,使用 UDP,解决了 TCP 队头阻塞问题,同时提升了连接恢复和握手效率。---### **10. HTTP2.0和1.0的区别?**HTTP/1.0 每次请求都要新建连接;HTTP/2 引入了多路复用、头部压缩、服务器推送等特性,提高了性能,且可以复用同一个 TCP 连接处理多个请求。---### **11. Java 当前版本的 GC 过程?**以 G1 GC 为例,它将堆划分为多个 Region,分代管理。先在年轻代进行 Minor GC,把对象晋升到老年代;当老年代空间不足时进行 Mixed GC,回收部分老年代;G1 的目标是低延迟,使用并发标记、并发清理等方式减少 STW 时间。---### **12. Redis 和 MySQL 的区别?**Redis 是内存数据库,读写速度快,适合缓存、排行榜等场景;MySQL 是磁盘数据库,支持复杂查询、事务等,适合数据存储场景。Redis 通常作为 MySQL 的补充,不是替代。---### **13. Redis 是怎么更新的?**通常使用 **写穿** 或 **写回** 策略。- 写穿是:写数据库后,主动更新或删除 Redis 缓存;- 写回是:先写 Redis,异步同步到数据库(一般需要消息队列保证最终一致性)。---### **14. Redis 的数据如果删除失败了怎么解决?(从流程上解决)**可以用 **延迟双删策略**:第一次删除 Redis 缓存 → 更新数据库 → 延迟一段时间后再次删除 Redis,防止并发请求中缓存被旧数据污染。同时可以通过消息队列或异步任务补偿失败的缓存删除。---### **15. 慢查询怎么找?**- 对 MySQL,可以开启 `slow_query_log`,设定阈值,日志中就能找到执行时间较长的 SQL。- 也可以用 `EXPLAIN` 或 `SHOW PROFILE` 分析执行计划,找出瓶颈。- 在 Redis 中可以使用慢查询日志 `slowlog` 命令查看。---### **16. 实习中查询优化怎么实现的?**我通过 SQL 优化 + 索引优化 + 缓存设计三方面入手:比如原来使用 `LIKE '%keyword%'` 模糊查询,改为分词索引提高命中;并对常用查询加入缓存,如 Redis + 本地缓存双层缓存机制。---### **17. 具体怎么找到慢查询的?**在 MySQL 中打开 `slow_query_log`,通过 `mysqldumpslow` 工具整理日志;配合监控工具(如阿里云 DMS、Prometheus + Grafana)定位慢 SQL,再用 `EXPLAIN` 看是否走索引,有没有全表扫描。---### **18. RESTful API 的特点?**- 使用统一的 URI 命名资源(如 `/users/123`);- 使用 HTTP 方法表达行为(GET、POST、PUT、DELETE);- 无状态性,服务端不存客户端状态;- 可缓存,提高性能;- 结构清晰,易于维护和扩展。---### **19. 1TB 整型数据怎么找中位数?(提示快排)**1TB 数据无法一次性放进内存。可以使用**外部排序算法**,或者基于**快速选择算法(QuickSelect)**的思想,通过分区,把比 pivot 小和大的数分别归类,类似快排的 partition 过程,只递归中位数所在的分区,直到找到目标位置。时间复杂度期望是 O(n)。
查看22道真题和解析
点赞 评论 收藏
分享
一面1.介绍一下项目2.有做权限吗3.登陆之后的权限,比如说我能操作哪些文章,不能操作哪些文章(刚刚说的是如何保存登陆态)查看文章的时候最终需要拉取一个接口去查看文章,如果我已经获取了这个接口并且不断用Postman伪造发请求,如何处理这种情况?先回答在请求头里带上Token,面试官说如果通过抓包拿到了Token那怎么办呢,回答在axios请求拦截器里面去对同一来源的请求做预防,如果两次请求发送的时间太短暂或者频率太快就拦截这个请求。4.目前技术栈5.localStorage和cookie有什么区别?Cookie 的本职工作并非本地存储,而是“维持状态”。 因为HTTP协议是无状态的,HTTP协议自身不对请求和响应之间的通信状态进行保存Cookie指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。 cookie是服务端生成,客户端进行维护和存储。我们可以把Cookie 理解为一个存储在浏览器里的一个小小的文本文件,它附着在 HTTP 请求上,在浏览器和服务器之间“飞来飞去”。它可以携带用户信息,当服务器检查 Cookie 的时候,便可以获取到客户端的状态。通过cookie,可以让服务器知道请求是来源哪个客户端,就可以进行客户端状态的维护,比如登陆后刷新,请求头就会携带登陆时response header中的set-cookie,Web服务器接到请求时也能读出cookie的值,根据cookie值的内容就可以判断和恢复一些用户的信息状态。我们可以在响应头中的set-cookie中获取cookie,也可以直接使用js的document.cookie来设置cookiecookie的缺陷:1不够大 每个cookie大小限制在4KB左右,cookie只能存储少量的信息,但这里的4KB是指一个cookie的键值对的值的大小,不是所有的一个域名下所有cookie的总大小 2同一个网站每次请求都会携带cookie 会带来性能浪费,增加不必要的开销cookie存储在浏览器和服务器LocalStorage保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。大小为5M左右仅在客户端使用,不和服务端进行通信除非手动删除,否则会永久存储在浏览器本地,相对更安全一般来说cookie存储与服务器进行交互的少量数据比如token(会话标识session_id信息)等,而localstorage存储大量的、仅前端使用的持久化数据(缓存的用户信息)。不能在 localStorage 中存储敏感信息(如密码、身份证号),因为它容易被 XSS 攻击访问到XSS:跨站脚本攻击:在其他浏览器中注入恶意的可执行的脚本代码,从而达到恶意攻击的目的。比方说一个用户评论功能,输入“<p>用户评论:<script>alert('你被攻击了')</script></p>”其他人浏览这条评论时就会看到弹窗,这说明脚本被执行了,那么攻击者就可以做更危险的事情比如获取Cookie,操作或者删除DOM等等反射型(构造恶意URL,用户点击链接会发送请求,服务器会把请求的脚本作为数据的一部分返回浏览器,浏览器随机解析了这段恶意代码)DOM型(如例子,构造特定的输入引起前端更新,使用闭合标签修改DOM解构)存储型(将恶意代码提交到网站的数据库中,访问网站时,恶意代码从数据库中被读入执行)防范措施:前后端在处理用户输入的内容时,都需要保持谨慎,对其中的特殊字符进行过滤和转义。使用安全的编程方式,譬如避免使用危险的 innerHTML 去设置 HTML 内容,而是使用 textContent。HttpOnly 是一个 Cookie 的标志,表示该 Cookie 只能通过 HTTP 请求发送,而无法通过 JavaScript 访问。这有助于防止 跨站脚本攻击(XSS)本质上Cookie用于通信,而LocalStorage用于存储6.服务器返回token存储在localStorage里,那这个token是不是会一直存在?登陆之后,用户就一直保持登陆状态?Token在后端一般会设置他的过期时间7.平时如何去学习?怎么去做这个项目的?8.追问:你说你刚才说看别人的项目源码,你看过哪个项目?开源项目的一些源码呀?9.Pinia是干嘛的10.使用全局变量和Pinia有什么区别?Pinia的几个重点:Store全局状态管理、响应式更新、Composition API、支持模块化、支持devtools使用全局变量的缺点:缺乏响应式、不能支持模块化、无法使用调试工具11.Pinia的数据存储在哪里?内存,一旦刷新页面,内存被清空,pinia的数据也会丢失。想要实现持久化存储,需要使用持久化插件使用watch监听store数据的变化,把数据存储在LocalStorage里,以后每次登陆网站都使用这个LocalStorage存储的数据。12.TCP和UDP的区别?TCP是可靠的,需要通过连接(三次握手),有流量控制和拥塞控制,传输速度较慢,传输单位是字节流(连续、无边界的数据传输方式,像水流一样不分段)UDP是不可靠的,不需要通过连接,没有流量控制和拥塞控制,传输速度较快,传输单位是数据报(独立、封包形式的数据传输方式,每一段都是一个独立的单元)流量控制:流量控制的核心目的是确保数据的发送速率不超过接收方的处理能力,防止接收方的缓冲区溢出。具体原理如下:1.接收方窗口大小:接收方为发送方提供一个 接收窗口大小(Window Size),表示它可以处理的最大数据量。这个值会动态变化,接收方会不断告诉发送方它当前的接收能力。2.滑动窗口机制:TCP协议采用 滑动窗口机制,发送方根据接收方的窗口大小来决定发送数据的数量。窗口大小可以根据接收方的缓冲区大小动态调整。当接收方的缓冲区可用空间减少时,它会通过窗口大小减小发送方可以发送的数据量。3.发送方控制:发送方根据接收方提供的窗口信息调整数据的发送速率。如果接收方的接收窗口变小,发送方就会减慢发送速率,避免数据丢失拥塞控制:拥塞控制的核心目的是避免网络拥塞,防止整个网络的性能因数据过载而下降。TCP协议采用了多种机制来动态调整发送方的发送速率。具体原理如下:1.慢启动:TCP连接刚建立时,发送方的拥塞窗口(Congestion Window,CWND)很小。随着每次成功的确认(ACK)到达,窗口逐渐增大。这个过程称为 慢启动。慢启动的目标是渐进地增加发送速率,避免网络立即出现拥塞。2.拥塞避免:一旦窗口增大到一定程度(慢开始门限),TCP会进入 拥塞避免 阶段。在这个阶段,拥塞窗口的增大变得更加缓慢(每收到一个确认,窗口增大一个固定值)。这个阶段是为了避免突然增大的窗口造成网络过载。3.快速重传和快速恢复:•快速重传:当发送方收到三个相同的确认号(即出现丢包情况),它会立即重发丢失的数据包,而不是等待超时。•快速恢复:当发生丢包后,拥塞窗口的大小会被减少,并进入 快速恢复 阶段,继续发送数据,但在一个较小的窗口下,直到网络恢复正常13.两个JS题第一个是实现异步相加,第二个是实现一个QQman类,满足异步输出14.https和http有什么区别? http是明文传输,https在http基础上使用了TLS加密15.讲一讲TLS16.讲讲对称加密和非对称加密对称加密:发送方和接收方用同样的规则对数据进行加密,也可以使用同样的钥匙对数据进行解密,缺点就在于如果第三方知道了加密的规则,他就很容易进行破解传输数据。(AES算法)非对称加密:公钥:可以共享给任何人的加密措施,一般用于加密。私钥:只有拥有者持有的加密措施,一般用于解密。使用对方的公钥加密数据,这样传输的内容只有对方使用自己的私钥才能解密,就算是发送方也无法解密,这就保证了加密的有效性。RSA算法非对称加密更加安全,但是速度太慢,不适合传输大型文件,一般用于交换密钥或者身份认证。对称加密速度更快,可以用来传输大量数据。17.对称加密和非对称加密分别用于什么?18.为什么不全部使用非对称加密让传输更安全?19.做电商平台有遇到什么难点吗20.说说遇到的难点以及是怎么解决的(说了全局数据共享,使用Pinia代替了ref)21.如果一个页面它不展示,但是用了那个 Pinia 里面的一个数据,数据更改的时候,看不见的那个页面的 demo 会不会更改?讲了一下响应式更新 defineProperty proxy watcher update22.了解过vue2吗?vue2和vue3你觉得有哪些不同讲了一下组合式API和选项式API23.追问:讲讲Composition API和Options API的区别相同功能的逻辑可写在一起,复用性更强,更支持TS如何解释复用性更强?vue2相较于vue3的话vue2是没有ref这个响应式变量的声明的。他的响应式是通过data()、computed、watch等这些API定义在组件的内部来实现的,而不是通过组合函数复用。在vue3里组合式APi可以将相似的逻辑封装成独立的组合函数并导出,其他组件再导入这个函数就可以直接使用(优点:响应式、自动绑定生命周期钩子)24.了解TS吗?不是很了解,说说泛型25.后台怎么解决的我说用的Mock.js,因为不会后端,也没有和别人一起开发这个项目。面完无缝接二面,字数超了,新帖发。
查看24道真题和解析
点赞 评论 收藏
分享
评论
8
14
分享

创作者周榜

更多
牛客网
牛客企业服务