Interview
Interview
思维小刀
这个作者很懒,什么都没留下…
展开
-
Go怎么实现map并发安全的三种方式
一个操作会导致整个map被锁住,导致性能降低。所以提出了分片思想,将一个map分成几个片,按片加锁。第三方包实现:github.com/orcaman/concurrent-map。sync.Map在读多写少性能比较好,否则并发性能很差。原创 2024-05-02 10:53:36 · 287 阅读 · 0 评论 -
PHP依赖注入和容器
Docker主要就是借助 Linux 内核技术Namespace来做到隔离的,其实包括文件的隔离,资源的隔离都是在新的命名空间下通过mount挂载的方式来隔离的。Do处。原创 2022-05-17 23:05:55 · 230 阅读 · 0 评论 -
HTTPS和HTTP区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https前者是80,后者是443。...原创 2022-05-16 20:31:53 · 114 阅读 · 0 评论 -
Go解决slice map线程不安全的原因与方法
slice线程不安全原因程全的情况主要是在内存的扩容两个协程同时写入到同一个空间的时候就会出现竞争;最终只有一个写入sync的锁机制map不安全原因Map在进行查找、赋值、遍历、删除的操作的时候都会对hamp.flags进行标记,如果发现有标记则直接panic1. 是运用sync.RWMutex 2. 是运用sync.Map...原创 2022-05-16 20:30:54 · 434 阅读 · 0 评论 -
Golang心跳实现
客户端发送心跳请求+重试机制。重试X次失败则定义为离线服务端响应心跳请求+超时机制。超时X秒未收到心跳则离线//服务端//全局变量var ids = make(map[string]chan byte)func ResponseHeartBeat(id string) { if _, ok := ids[id]; ok { //保活心跳请求 ids[id] <- 0 } else { //上线触发器 ...原创 2022-05-16 16:24:19 · 931 阅读 · 0 评论 -
Golang并发操作中常见的死锁情形
https://www.jb51.net/article/221391.htm#_label0第一种情形:无缓存能力的管道,自己写完自己读 第二种情形:协程来晚了 第三种情形:管道读写时,相互要求对方先读/写 第四种情形:读写锁相互阻塞,形成隐形死锁...原创 2022-05-16 16:26:32 · 262 阅读 · 0 评论 -
Redis缓存穿透 缓存击穿 缓存雪崩原因及其解决方案
解决缓存穿透方法一:布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。方法二:如果一个查询返回的数据为空(不管数据不存在还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。解决缓存击穿key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题。使用互斥锁(mutex key)业界比较常用的做法原创 2021-05-17 23:29:05 · 148 阅读 · 0 评论 -
Laravel生命周期
https://www.insp.top/learn-laravel-container原创 2021-08-02 14:18:29 · 664 阅读 · 0 评论 -
TCP三次握手四次挥手 TCP/UDP区别
三次握手第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和..原创 2021-08-17 22:45:12 · 278 阅读 · 1 评论 -
TP、Yii、Laravel的区别
前端yii很多前端小部件detailview gridview laravel使用的blade引擎配置Yii多重配置文件 覆盖配置 多重环境配置 分本地线上环境配置 更加灵活; TP设置开发环境进行配置验证验证层:YII为model的rule在模型里面进行验证(存储db时候验证) TP使用的验证类 在单独的文件里面中间件yii是beforeaction , laravel tp是中间件的概念 设计模式多控制器yii有gii ,tp laravel使用的是命令行数据库原创 2019-01-01 16:23:10 · 2295 阅读 · 0 评论 -
Go面试题目
init和main的对比相同点:两个函数在定义时不能有任何的参数和返回值 Go程序自动调用不同点:init可以应用于任意包中,且可以重复定义多个。main函数只能用于main包中,且只能定义一个。make 被用来分配引用类型的内存,返回的还是这三个引用类型本身,make常用。new 被用来分配除了引用类型的所有其他类型的内存,返回的是指向类型的指针。new不常用。...原创 2021-08-10 10:22:10 · 436 阅读 · 1 评论 -
Elasticsearch和MongoDB对比
相同点:都是以json格式管理数据的nosql数据库。 都支持CRUD操作。 都支持聚合和全文检索。 都支持分片和复制。 都支持阉割版的join操作。 都支持处理超大规模数据。 目前都不支持事务或者叫支持阉割版的事务。不同点:es是java编写,通过RESTFul接口操作数据。mongodb是C++编写,通过driver操作数据 mongodb的分片有hash和range两种方式,es只有hash一种。 es是天生分布式,主副分片自动分配和复制,开箱即用。mongodb的要手动配置原创 2021-08-11 09:10:29 · 493 阅读 · 0 评论 -
Go与PHP区别:类型 引用 语法 错误 性能 应用 生态
1.引用:go使用的package goget,php使用的namespace与usecomposer2.语法:go简洁灵活 php全面方便很多内置函数 方便编码3.类型:go为编译性语言 改问题不如PHP直接 php无需编译4.错误:go的错误处理机制;php本身或者框架即可纠错5.性能:go重视并发性能 php重视开发速度6.应用:go侧重于容器/高性能并发/云计算/...原创 2019-01-09 21:39:42 · 2962 阅读 · 1 评论 -
Go的协程与Swoole的协程的区别:环境支持 线程
swoolego(function () { echo "hello wangbaojin \n";});gogo funcswoole 协程对比Swoole 的协程客户端必须在协程的上下文环境中使用。Swoole 的协程是基于单线程的, 无法利用多核CPU,同一时间只有一个在调度。goroutine对比:环境 多核 原理GPM是通过 GPM 调度模型实现的。M: 表示内核级线程,一个 M 就是一个线程,goroutine 跑在 M 之上的。G: 表示一原创 2021-05-14 09:18:17 · 481 阅读 · 1 评论 -
Go的&*
1.值传递与引用传递形象化理解:引用传值:相当于把烧饼串成一串,然后是有底座的,这个底座就相当于地址,这个地址对应的烧饼就相当于变量,这个地址对应的所有的变量都是一样的;值传递:各个烧饼都是平放的,新的烧饼只是复制了之前的烧饼,之后被吃了,或者被煮了,与最开始的烧饼无关了传地址进函数,函数内外的变量一起变化传值进去,函数内的变化不影响函数外2.分析两者:2.1采用引用传值的...原创 2019-09-06 10:57:34 · 1136 阅读 · 0 评论 -
Go进程/线程/协程:单元 空间资源 切换 共享
OS操作系统分为操作与资源两部分,操作就是方法,资源就是硬盘资源,合称为操作系统。因为是一个系统,任务很多很繁杂,所以根据软件不同进行分解,一个软件就是一小块,就是进程。进程比喻:进程就是应用程序的启动实例,一个软件一个进程,例如我们运行一个游戏,打开一个软件,就是开启了一个进程。过程:启动一个软件会把此进程代码(就是方法集,方法集包括生产者消费者函数)注入到cpu的寄存器中,...原创 2019-09-07 10:32:00 · 435 阅读 · 0 评论 -
Go的slice扩容机制
知识1.如果切片的容量cap小于1024,那么扩容的时候slice的cap就乘以2;一旦元素个数超过1024个元素,增长因子就变成1.252.如果扩容之后,还没有触及原数组的容量,那么,切片中的指针指向的位置,就还是原数组,如果扩容之后,超过了原数组的容量,那么,Go就会开辟一块新的内存,把原来的值拷贝过来,这种情况丝毫不会影响到原数组。例子import ( "fmt")func main(){ array := [4]int{10, 20, 30, 40} s原创 2020-05-26 14:44:13 · 1202 阅读 · 1 评论 -
Go知识点:slice、map、func、struct、method、interface、channel、goroutine
slice动态数组,使用make生效map关联数组,使用make生效method继承是直接把接口体写在结构体中即可前面的接收者进行定义方法的归属类对于结构体进行实例化后就可以调用所归属的方法interface只要一个类实现了接口定义的方法,就可以说这个类实现了接口接口中仍然可以定义接口接口可以接收任何类型的数据...原创 2020-10-01 15:26:14 · 190 阅读 · 0 评论 -
PHP完整的一次请求过程:请求 dns nginx监听 转发给php-fpm worker处理 返给nginx
(1) 在本机浏览器中输入网址:my.test.com(2)请求中的域名经过域名服务器变成IP地址;(3) 监听的nginx接收到此次请求,由于这是一次Http请求,所以nginx的核心模块会把它交给Http模块处理(4) 经过请求初始化与请求解析,如果是php的请求,nginx会把此次请求交由基于fast-cgi的php-fpm;(5) php-fpm master管理着多个php-fpm worker进程,其中一个获取执行权之后,由这个php-fpm worker开始执行这一次请求。原创 2020-06-01 00:07:48 · 662 阅读 · 0 评论 -
PHP的APACHE CGI、FastCGI及其对应PHP-CGI PHP-FPM
1Web Server与app传递数据的方法:Apache采用PHP Module加载模块的方式apache配置说起apache配置如下 #添加下边两行LoadModule php5_module D:/php/php5apache2_2.dllAddType application/x-httpd-php .php# 修改如下内容<IfModule dir_module> DirectoryIndex index.php index.html</IfMod原创 2021-05-12 15:08:27 · 374 阅读 · 1 评论