Skip to content
gqlxj1987's Blog
Go back

有意思的面试题

Edit page

mysql的索引部分:关于最左匹配部分

在使用查询的时候遵循mysql组合索引的”最左前缀”,下面我们来分析一下 什么是最左前缀:及索引where时的条件要按照建立索引的时候字段的排序方式

1、不按索引最左列开始查询(多列索引) 例如index(‘c1’, ‘c2’, ‘c3’) where ‘c2’ = ‘aaa’ 不使用索引,where c2 = aaa and c3=sss 不能使用索引

2、查询中某个列有范围查询,则其右边的所有列都无法使用查询(多列查询)

Where c1= ‘xxx’ and c2 like = ‘aa%’ and c3=’sss’ 改查询只会使用索引中的前两列,因为like是范围查询

3、不能跳过某个字段来进行查询,这样利用不到索引,比如我的sql 是

explain select * from award where nickname > ‘rSUQFzpkDz3R’ and account = ‘DYxJoqZq2rd7’ and created_time = 1449567822; 那么这时候他使用不到其组合索引.

因为我的索引是 (nickname, account, created_time),如果第一个字段出现 范围符号的查找,那么将不会用到索引,如果我是第二个或者第三个字段使用范围符号的查找,那么他会利用索引,利用的索引是(nickname),

mysql在使用like查询的时候只有不以%开头的时候,才会使用到索引。

给一个随时会断掉的输入流,取100个输入,保证尽可能的公平

先取100个,再按照一定的比率,取后面的数据,同时按照一定的概率对之前选取的数据进行替换,采用类似ping-pong的机制,通过一定概率进行替换

关于twitter的Finagle框架 rpc框架 同gRPC的区别?

都是rpc部分的框架,

关于goroutine的使用方面,关于使用了多少个goroutine,内存占用的情况

可能来说,监测内存占用情况,比较合适,runtime上去计算多少个goroutine上,有点不是很实用

go与java的区别

关于多线程的实现方式,一个是1:1对应到操作系统的线程,一个是n:m:p的方式,

finally以及defer之间

function部分多个返回值部分

部署的方便性部分,二进制文件以及jar包

在起多线程方式上,java还有哪些方式?thread/runnable/callable、future部分

nodejs的一些优缺点

事件驱动,非阻塞IO,单进程,单线程,callback机制,

emet的方式?

遇到I/O操作,会再起一个线程,不跟主线程冲突,适合I/O密集型应用

tcp的三次握手以及四次挥手

tcp

tcp为全双工的,

简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:

1.服务器读通道关闭

2.客户机写通道关闭

3.客户机读通道关闭

4.服务器写通道关闭

IO模型

阻塞、非阻塞,针对应用来说,非阻塞也是轮询的那种

IO多路复用,主要是内核给出相关的信息,如select、poll、epoll

异步通讯,就是服务端来控制传输,无需客户端询问的那种

同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成

需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞

设计一个内存分配算法

slab算法

slab算法

分布式系统的设计几个点

稳定性,不允许单点失效

尽可能减少节点间通讯开销

应用服务最好做成无状态的

CAP理论:一致性,可用性,分区容忍性(可靠性), 带来的一个问题,是ACID理论,(原子性,一致性,隔离性,持久性)

选主算法方面的问题,关于paxos算法的解释,以及raft协议的阐述

docker

适用于弹性部署的场景,例如抢购,秒杀,服务压力骤增,需要短时间增加容器。

同时适用于分布式情况,毕竟分布式部署应用还需要考虑,单点故障的情况。

还有就是异步处理任务,配合动态增减服务器,就可以节省资源,降低成本

编排的目的:服务发现,高可用,资源管理,端口管理

各种编排的策略:swarm, k8s,双方提供的功能不同,

linux中buffers和cached

used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

free:未被分配的内存。

shared:共享内存,一般系统不会用到,这里也不讨论。

buffers:系统分配但未被使用的buffers 数量。

cached:系统分配但未被使用的cache 数量

buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.

cached是用来给文件做缓冲。

那就是说:buffers是用来存储,目录里面有什么内容,权限等等。

而cached直接用来记忆我们打开的文件


Edit page
Share this post on:

Previous Post
custom application monitoring for go
Next Post
面试总结