2019-03-20

2019-03-20  本文已影响0人  一斗

1. go的并发调度模型?

go的并发调度模型可以简称为GPM模型,其中G代表goroutine,P代表goroutine运行所必须的资源,每个P都有一个G队列,M代表内核线程。一个M在与一个P关联后,就形成了一个有效的G运行环境,P的G队列中的G会被依次传递给关联的M去运行。当goroutine因为channel操作或者网络I/O而阻塞时,对应的G会被放置到某个wait队列,而M会跳过该G尝试获取并执行下一个G,如果此时没有G供M运行,那么M将解绑P,并进入sleep状态;当G被阻塞在某个系统调用上时,M会处于阻塞,此时M会与P解绑,P会寻找其他空闲或新建M接管该P,然后继续运行其中的G。

2. go的GC

go的GC使用是一种自动内存管理,基于追踪的垃圾回收算法。分为两个阶段,标记阶段和清扫阶段。其中标记过程使用三色标记算法,具体来说分为几个步骤,起初所有对象标记为白色,从根出发扫描所有可达对象,标记为灰色,放入待处理队列,然后从队列中取出灰色对象,将其引用对象标记为灰色放入队列,自身标记为黑色,重复这个过程,直到灰色对象队列为空,此时白色对象即为垃圾,进行清扫。

3. go与python区别

  1. go是静态语言,python是动态语言,尽管是强类型的,但变量的申明不需要指明类型,导致时间一长,回看代码,对于一些变量,函数的参数等经常忘记当初约定的类型。
  2. 并发模型上,go使用GPM模式,通过goroutine在channel间传递消息来通信的方式进行并发编程,而python一般通过传统的多线程模式进行并发,但由于CGL的存在,其多线程并不是正真意义上的多线程,于是又有了所谓协程,但目前无论是官方还是第三方库,支持上都还不完善
  3. python有类,有继承,多态等机制,而go没有类,相似是通过struct结构间的嵌套,组合等方式实现类似的效果
  4. 鸭子类型,python由于是动态语言,例如两个类都实现了某个方法,那么作为参数传给函数时,方法可以被正确调用即可,而不会关心到底是哪个类,但是如果传入的类没有相应的方法,会在运行期间报错。go通过interface实现鸭子类型,并且可以在编译期间就检查出具体接口类型是否确实必要的方法。

4. 悲观锁和乐观锁

悲观锁对数据的修改持保守态度,即认为任何修改都会发生数据不一致的问题,采取的措施是使用事务,事务中查询使用select...for update,这样其他事务同样使用select...for update会发生阻塞等待前者的commit。缺点是影响程序的并发性,增加数据库的开销。乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测。采用数据版本记录机制实现,通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值+1。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。

5. mysql事务隔离

6. mysql存贮引擎

7. b+树

8. 红黑树

9. 网络7层协议,各层作用和协议举例

10. TCP和UDP区别,三次握手,四次挥手,TCP传输过程的保证机制

11. web安全

  1. XSS跨站点脚本攻击:“HTML注入”方式篡改网页,插入恶意脚本。危害:cookie劫持。防御:用户输入检查,Set-Cookie时给Cookie植入“HttpOnly”标识,将Cookie与客户端IP绑定。
  2. CSRF跨站点请求伪造:通过诱导用户点击伪造网页触发恶意请求,操作用户正常网页行为,原因是成功发送了cookie。防御:重要操作加验证码,referer-check,加token
  3. 点击劫持:欺骗用户点击透明的iframe,进入欺诈网页。防御:禁止跨域的iframe(HTTP头X-Frame-Options)。
  4. 注入攻击(SQL注入)。防御:检查用户输入,使用预编译语句。
  5. 文件上传漏洞。防御:文件上传目录设置为不可执行,判断文件类型(MIME Type),使用随机数修改文件名和文件路径,单独设置文件服务器的域名(同源策略使客户端攻击失效)
  6. DDOS:短时间对服务器进行大量的非正常请求,导致正常的用户无法访问服务。举例SYN flood攻击。防御:统计IP访问频率,商用防御设备。以上是针对网络层的DDOS,还有正对应用层的DDOS,主要是大量数据查询操作消耗服务器资源。防御:通过ip和cookie限制请求频率,使用缓存,验证码等。

12. OAuth2

13. k8s架构,服务访问

14. redis为什么快?数据类型,内部实现?持久化方式?集群访问?

上一篇下一篇

猜你喜欢

热点阅读