目录 - 面试专题

Golang语言


1.select是随机的还是顺序的? select会随机选择一个可用通用做收发操作 2.Go语言局部变量分配在栈还是堆? Go语言编译器会自动决定把一个变量放在栈还是放在堆,编译器会做逃逸分析,当发现变量的作用域没有跑出函数范围,就可以在栈上,反之则必须分配在堆。 查看资料 3.简述一下你对Go垃圾回收机制的理解? v1.1 STW v1.3 Mark STW, Sweep 并行 v1.5 三色标记法 v1.8 hybrid write barrier(混合写屏障:优化STW) Golang垃圾回收剖析 4.简述一下golang的协程调度原理? M(machine): 代表着真正
[阅读全文]

Golang面试题解析(一)


最近在很多地方看到了golang的面试题,看到了很多人对Golang的面试题心存恐惧,也是为了复习基础,我把解题的过程总结下来。 面试题 1. 写出下面代码输出内容。 package main import ( "fmt" ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后&#
[阅读全文]

Golang面试题解析(三)


21.编译执行下面代码会出现什么? package main var( size :=1024 max_size = size*2 ) func main() { println(size,max_size) } 解析 考点:变量简短模式 变量简短模式限制: - 定义变量同时显式初始化 - 不能提供数据类型 - 只能在函数内部使用 结果: syntax error: unexpected := 22.下面函数有什么问题? package main const cl = 100 var bl = 123 func main() { println(&bl,bl) println(&am
[阅读全文]

Golang面试题解析(二)


12.是否可以编译通过?如果通过,输出什么? func main() { i := GetValue() switch i.(type) { case int: println("int") case string: println("string") case interface{}: println("interface") default: println("unknown") } } func GetValue() int { return 1 } 解析 考点:type 编译失败,因为type只能使用在interface
[阅读全文]

Golang面试题解析(四)


  1. 算法 在utf8字符串判断是否包含指定字符串,并返回下标。 “北京天安门最美丽” , “天安门” 结果:2 解答: import ( "fmt" "strings" ) func main(){ fmt.Println(Utf8Index("北京天安门最美丽", "天安门")) fmt.Println(strings.Index("北京天安门最美丽", "男")) fmt.Println(strings.Index("", &#

[阅读全文]

操作系统


1.Select,Poll,Epoll的区别? select,poll,epoll都是IO多路复用的机制,具体区别请查阅资料 查看资料 2.什么叫虚拟内存? 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的 可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内 存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 3.什么叫桥接? 桥接是指依据OSI网络模型的链路层的地址,对网络数据包进行转发的过程,工作 在OSI的第二层;一般的交换机,网桥就有桥接作用。 4.Linux什么命令可以查看cpu和内存?怎么查看每个核的cpu呢
[阅读全文]

数据库


1.Mysql事物的隔离级别? 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommitted) 是 是 是 读已提交(read-committed) 否 是 是 可重复读(repeatable-read) 否 否 是 串行化(serializable) 否 否 否 相关资料 2.Innodb和Myisam的区别? Innodb支持事务,而Myisam不支持事务 Innodb支持行级锁,而Myisam支持表级锁 Innodb支持外键,而Myisam不支持 Innodb不支持全文索引,而Myisam支持 Innodb是索引组织表, Myis
[阅读全文]

数据结构


1.什么是跳跃表? 跳跃表是基于有序链表的一种扩展 查看资料 2. 介绍下 RESTFull API 方式下, 怎么做到快速路由? 一般使用前缀树/字典树, 来提高查找速度. 开源的路由模块里, httprouter 是比较快的, 参考: https://github.com/julienschmidt/httprouter 他使用了一种改进版的前缀树算法. 这个树的应用非常广泛, 除了做路由, 还有 linux 内核里使用, 在数据库里也有用到. 参考文章: 1. 路由查找之Radix Tree 2. 图文详解Radix树 3.radix tree在数据库PostgreSQL中的一些应
[阅读全文]

架构


1.Etcd满足了CAP原理中哪两个特性? etcd是高可用的键值存储系统。满足CP原理 2.Etcd V2和V3版本的区别? V2和V3接口不一致,存储不一样,数据互相隔离 A.V2是纯内存实现,并未实时将数据写入到磁盘;V3是内存索引(kvindex btree) + 后端数据库存储(boltdb: 单机的支持事务的kv存储) B.V2过期时间只能设置到每个key上,如果多个key要保证生命周期一致则比 较困难;V3过期时间通过lease,可以给每个key设置相同的过期id C.V2 Watch只能watch某一个key以及子节点(通过参数recursive),不能 进行多个wa
[阅读全文]

笔试题


1.Golang笔试题解析 查看资料
[阅读全文]

算法题


1.如何在一个给定有序数组中找两个和为某个定值的数,要求时间复杂度为O(n), 比如给{1,2,4,5,8,11,15}和15? func Lookup(meta []int32, target int32) { left := 0 right := len(meta) - 1 for i := 0; i < len(meta); i++ { if meta[left]+meta[right] > target { right– } else if meta[left]+meta[right] < target { left++ } else { fmt.Println(f
[阅读全文]

网络


1.tcp三次握手和四次挥手流程示意图?在黑板上画出 查看资料 2.客户端在建立异常中发现很多connect reset by peer,你觉得问题出在哪? 三次握手维护的半连接队列或者全连接队列溢出导致 查看资料 3.https建立连接的过程? 1.客户端发送请求到服务器端 2.服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在 3.客户端验证证书和公开密钥的有效性,如果有效,则生成对称密钥并使用公开密钥加密发送到服务器端 4.服务器端使用私有密钥解密数据,并使用收到的对称密钥加密数据,发送到客户端 5.客户端使用对称密钥解密数据 6.SSL加密建立……… 4.tcp和u
[阅读全文]

设计题


1.要设计一个秒杀系统要注意什么? 前端秒杀页面 页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态 元素。通过CDN来抗峰值。 禁止重复提交:用户提交之后按钮置灰,禁止重复提交。 用户限流:在某一时间段内只允许用户提交一次请求,比如可以采取IP限流。 服务端控制器(网关) 限制uid访问频率:我们上面拦截了浏览器访问的请求,但针对某些恶意攻击或其它插件,在服务端控制层需要针对同一个访问uid,限制访问频率。 服务层 采用消息队列缓存请求:既然服务层知道库存只有100台手机,那完全没有必要把100W个请求都传递到数据库啊,那么可以先把这些请求都写到消息队列缓存一
[阅读全文]