XSKY星晨天合-后台开发岗

一面

  • TCP与UDP区别
  • UDP的优点(实时性好,占用资源低,无需三次握手较少被黑客利用的机会)
  • UDP增加哪些功能可以实现更可靠、更稳定、且保证有序(超时重传、滑动窗口流量控制、序号/确认序号,面试官提到了kcp)
  • Go Map如何实现并发安全?
  • 在原生map的基础上加锁(注意控制锁的颗粒度,避免锁住整个map,可采用分段锁实现,比如:对一个大map进行hash,其内部是n个小map,根据key来来hash确定在具体的那个小map中,这样加锁的粒度就变成1/n了
  • 使用sync.Map
  • 写操作:直接写dirty map。
  • 读操作:先读read map,没有再读dirty map。
  • 优点:底层通过两个map来实现读写分离,保证线程安全的同时,降低锁时间来提高效率
  • 缺点:不适用于大量写的场景,这样会导致read map读不到数据而进一步加锁读取,同时dirty map也会一直晋升为read map,整体性能较差;适用场景:适合读多写少的场景
  • 原理:在这里插入图片描述
    sync.Map底层使用了两个原生map,一个叫read,仅用于读;一个叫dirty,用于在特定情况下存储最新写入的key-value数据:
    在这里插入图片描述
    read(这个map)好比整个sync.Map的一个“高速缓存”,当goroutine从sync.Map中读取数据时,sync.Map会首先查看read这个缓存层是否有用户需要的数据(key是否命中),如果有(命中),则通过原子操作将数据读取并返回,这是sync.Map推荐的快路径(fast path),也是为何上面基准测试结果中读操作性能极高的原因。
  • sql注入的原理,解决方案。(面试官说他之前抓包查看过sql模板化的过程:其实就是MySQL内部先传sql模板,然后再传参数到模板中)

可以理解为sql模板化,通过占位符将用户传入的值当做字符串来处理,避免将用户不可预期的传入参数当做sql命令来执行。
预编译语句在被MySQL编译器编译后,执行代码会被缓存下来。那么下次调用时,只要是相同的预编译语句就再不需要编译,只要将参数直接传入编译过的语句执行代码中即可。

  • 介绍下https协议,其非对称加密的过程
  • https加密过程中,为什么需要第一次http的协商对称加密的密钥操作,然后再通过对称加密进行数据传输呢?(tls的两个阶段)

避免在网络传输的过程中被中间人拦截请求,即使中间人拦截了客户端的请求,也因为中间人自身没有服务端私钥,导致其不能对请求进行对称解密,从而获取不到客户端对称加密的密钥。

  • 客户端收到服务端的公钥后,为什么要本地生成一个随机值作为客户端密钥,而不直接使用服务端的公钥作为客户端自身的密钥呢?

面试官说,因为性能上不允许,待了解…

  • RSA算法怎么加解密的?它的public key和secret key分别是什么东西(加解密很耗时)?AES对称加密的流程呢?
  • 项目介绍?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值