最近收到鱼友反馈,说鹅厂开奖了,于是我去看了一下开奖情况:目前开奖的岗位以深圳居多,大部分岗位还没有开奖。但已经能看到不少同学在吐槽开奖薪资了。
整理了一部分开奖信息:
岗位 | base | 薪资 | 备注 |
---|---|---|---|
算法 | 一线 | 31*15+30+60 | SSP |
研发 | 北京 | 32*15+60 | SSP |
后台开发 | 深圳 | 29*15+4+2 | SP |
后台开发 | 深圳 | 27*15+30 | 硕士双一流 |
测开 | 深圳 | 25*15 | 双非本,无股权和签字费 |
后端 | 西安 | 13*16+12k+20k | 腾讯云智 |
只看薪资,今年鹅厂给得不算小气,但今年鹅厂一部分 offer 是把房补和服务奖都融入了 base ,所以有的同学吐槽,这薪资看起来“光鲜亮丽”,其实还不如去年的烂白菜。
对比去年 24 届的技术岗开奖:
白菜:(16-18)*16
sp:(22-23)*16
ssp:(24+)*16
后续的开奖我们也会持续关注,欢迎大家加入编程导航,交流开奖心得。
今天为大家带来 编程导航 里一位鱼友秋招的腾讯面经,大家也可以自己试着答一下,看自己能回答上来多少。
腾讯面经:
一、HTTP 请求报文如何组成的
1)请求行:请求方法、请求URL、HTTP协议版本
2)请求头:
User-Agent:产生请求的浏览器类型
Accept:客户端希望接受的数据类型
Content-Type:发送端发送的实体数据的数据类型
Host:请求的主机名,允许多个域名同处于一个IP
3)空行:用于通知服务器以下不再有请求头
4)请求体:封装POST请求消息的请求参数的,GET没有请求体
二、HTTP1.0 和 HTTP1.1 的区别
HTTP1.0只保持短暂
的连接,每次请求都需要与服务器建立一个新的TCP
连接。
HTTP1.1可以支持长连接
,同时还可以支持客户端异步请求数据
三、介绍 HTTP 和 HTTPS(从概念 - 特性 - 使用场景 - 解决问题)
1)概念
HTTP(HyperText Transfer Protocol,超文本传输协议):是一种用于在网络上传输超文本数据的应用层协议。它是无状态的,即每次请求之间没有状态保持。HTTP 协议使用明文通信,数据在客户端和服务器之间传输时不进行加密。
HTTPS(HyperText Transfer Protocol Secure,安全超文本传输协议):是 HTTP 的安全版本。它通过使用 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议对传输的数据进行加密,从而确保数据在网络上传输时的机密性和完整性。
2)特性
HTTP 的特性:
无状态:HTTP 是无状态的协议,每个请求都是独立的,不保留之前请求的任何信息。
灵活性:HTTP 支持多种数据类型(文本、图片、视频等)的传输。
易于实现:HTTP 协议结构简单,容易实现和应用。
HTTPS 的特性:
安全性:通过 SSL/TLS 加密协议,HTTPS 提供了数据传输的机密性和完整性,防止数据在传输过程中被窃听或篡改。
身份认证:HTTPS 使用数字证书验证服务器的身份,确保客户端与合法的服务器通信,防止中间人攻击。
数据完整性:HTTPS 能检测数据在传输过程中是否被篡改,确保数据完整性。
3)使用场景
HTTP 的使用场景:
公开的、非敏感信息传输:用于不涉及敏感信息的网页浏览、公共API的调用等场景。例如,浏览新闻网站、博客文章等不涉及用户隐私的数据。
内部网络通信:在企业内部网络中,可能不涉及数据泄露的风险时,也可以使用 HTTP 协议。
HTTPS 的使用场景:
敏感信息传输:涉及用户隐私、金融交易、个人数据的场景,如登录页面、支付页面、电子邮件服务等。
网站安全性提升:使用 HTTPS 可以提高网站的可信度,浏览器地址栏会显示绿色锁标志,用户会更信任使用 HTTPS 的网站。
符合安全标准:许多行业对安全有强制要求,如金融服务、医疗保健等,需要使用 HTTPS 来保护敏感信息。
4)解决的问题
HTTP 解决的问题:
统一通信协议:开发跨平台的网络应用程序奠定了基础。
支持超文本传输:使得互联网浏览器能够请求并显示网页内容
HTTPS 解决的问题:
数据加密:HTTPS 通过加密传输的数据,保护敏感信息,防止被攻击者窃听。
身份验证:HTTPS 使用数字证书验证服务器身份,确保客户端连接的是合法服务器,防止中间人攻击。
数据完整性:通过校验机制,HTTPS 可以检测数据是否在传输过程中被篡改,确保数据的完整性。
四、HTTP 无状态的特性带来了什么问题?
无法保存用户会话信息,增加开发的复杂度,
客户端采用 Cookie
服务端采用 Session
采用 JWT 生成 Token 保留状态
容易遭受攻击(例如:XSS跨站脚本攻击)
XSS:攻击者往 web 页面里插入恶意的 HTML 代码(Javascript、css、html 标签等),当用户浏览该页面时,嵌入其中的 HTML 代码会被执行,从而达到恶意攻击用户的目的。
五、键入网址到网页显示,期间发生了什么?
1)解析URL,找到DNS
,从而获取目的服务器的IP地址
2)应用层HTTP报文、
传输层TCP报文、
网络层IP报文、
链路层`MAC报文组装数据包
3)送别者交换机送到出境子网的大门——路由器
PS:
1)我们会发现源IP和目的IP他们始终如一,而途径不同的交换机和路由器,MAC地址会一直变化。
2)交换机是二层网络设备(内部维护MAC地址和端口映射关系表)
3)路由器是三层网络设备(内部维护IP地址和接口映射关系表)
六、I/O 多路复用是什么?是什么?解决了什么问题?使用场景是什么?
是在单线程
中能够管理多个输入/输出通道技术,解决了之前每个通道都要建立一个独立的线程,耗费资源
的问题。包含三种常见的复用机制 select
、poll
、epoll
。常用于实现高性能的服务器和客户端应用程序、网络编程等。
PS: 关于三种复用机制的介绍
七、你说登录鉴权你采用的方案是什么呢?优势和劣势分别是什么呢?你还能想到其他的方案进行鉴权呢?
(1)JWT
(2)常⻅的登录鉴权⽅式有哪些?
面试鸭刷题软件里的回复:https://mianshiya.com/question/1835157125712117762
八、JWT 的 Token 的数据组成有哪些?
1)头部(Header)
2)负载(Payload)
3)签名(Signature)= 编码后的头部 + 编码后的负载 + 秘钥
token = header.payload.signature
可以选择不同的加密算法进行加密(HMAC SHA-256、RSA、HS256、HS384)算法强度越来越弱
追问:密码盐
九、JWT技术的优缺点
优点:
1)更少的数据库连接——基于算法来实现身份认证
2)无状态——不需要向传统的Web应用将用户信息存入到 Session中
缺点:
1)高度依赖服务端的秘钥
(硬编码)
2)服务端无法管理客户端的信息(客户端存储JWT信息)
3)服务端无法主动推送消息(比如:token令牌过期,客户端无感知)
4)冗余的数据开销(多占用内存空间)
5)令牌有客户端保存,易于盗取
6)重放攻击(添加nonce或者timeStamp时间戳)
追问:既然JWT有这么多缺点,你有什么好的措施进行防范呢?
1)清楚已泄露的令牌:在服务端进行存储生成token令牌,如有异常,直接清除
2)敏感操作:删除、更新、新增、上传、下载等,定期检查
用户身份
3)监控请求频率:监控用户在单位时间内的请求次数,当单位时间内的请求次数超出预定阈值
,则判定该用户密令是有问题的
4)设置过期时间、使用高强度算法、JWT黑名单、避免URL携带传递令牌
追问:我们知道Session和JWT都是没有解决CSRF、XSS等攻击,为什么不用Session?
本意就是在说关于Session进行用户信息管理这块的缺点?
1)增加了服务端的内存
2)扩展性限制(比如:关于用户激增问题,多用户如何管理他们用户信息呢?是由第一点引出的)
追问:那你知道哪些用于用户身份认证的技术么?
Session、OAuth2.0、SSO
十、热点Key解决方案(读多写少的场景)
典型:缓存击穿
1)二级缓存——应用程序的本地缓存(GuavaCache、Caffine、甚至HashMap)
2)将热Key分散到不同的服务器中(热Key备份分到不同的Redis中,随机访问,以免压垮Redis)
3)细分热Key,有点像缩小锁粒度,将热Key拆分,打到不同Key上,达到分流降热的效果
4)将核心和非核心的业务进行隔离,以免出现热Key事件崩塌影响核心业务
十一、redis常见的数据结构(底层描述,根据源码)
追问:Bitmap 和布隆过滤器的区别
在 Redis 中的 Bitmap 可以实现布隆过滤器机制,在 Java 客户端的 Redission 可以直接调用方法进行实例化一个布隆过滤器。
Bitmap 常用于海量数据查询且能够接受一定的容错(误判)
追问:你了解过跳表吗?压缩列表?
跳表的数据结构是链表 + 多级索引结构
,redis的有序集合
采用的数据结构其中有一个就是跳表,相比于红黑树,跳表的区间查询略胜一筹。时间复杂度是 Logn。
PS:由此可以联想到 MySQL 当中索引也是利用这个思路,进行快速查询数据。
压缩列表:本质就是一个数组,在头部添加了列表长度、尾部偏移量、列表个数以及数组尾部添加了列表结束标识符。能够有利于查找数据的头部元素和尾部元素。
追问:有序集合什么时候会使用压缩列表,什么时候会用上调表?
十二、生产者 - 消费者在系统中如何实现(架构 or 源码)
通常使用互斥锁和信号量方法,在该方法,要借助缓冲队列(共享内存)进行进行实现。三个变量(缓冲队列长度变量、生产者等待缓冲区不满、消费者等待缓冲区非空)。通过该方法,实现生产者 - 消费者的同步问题。
十三、进程是如何通信的?
1)共享内存
2)信号量(信号量是一种用于进程间同步和互斥的机制,可以通过控制对临界资源的访问来实现进程之间的协调。)
3)管道流
十四、线程是如何通信的?
1)锁机制(互斥锁、读写锁)
2)条件变量
3)信号量
十五、进程和线程的关系(从概念得出结论)
十六、介绍 Tcp 和 Udp(从概念 - 特性 - 使用场景 - 解决问题)
直接进行八股吟唱。
👇🏻 点击下方阅读原文,获取鱼皮的编程学习路线、原创项目教程、求职面试宝典、编程交流圈子。
往期推荐
我的编程学习小圈子
小米开奖,薪资差点意思。。
别人秋招在开奖,我还是零Offer,坚持有意义吗
被大厂白菜价劝退
在蚂蚁实习,好憋屈