go语言面试真题及解析 golang语言面试( 十 )


另外查询不要使用select *,根据select的条件+where条件做组合索引,尽量实现覆盖索引,避免回表 。
僵尸进程:
即子进程先于父进程退出后 , 子进程的PCB需要其父进程释放 , 但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进程,僵尸进程实际上是一个已经死掉的进程 。
孤儿进程:
一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程 。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作 。
子进程死亡需要父进程来处理,那么意味着正常的进程应该是子进程先于父进程死亡 。当父进程先于子进程死亡时,子进程死亡时没父进程处理,这个死亡的子进程就是孤儿进程 。
但孤儿进程与僵尸进程不同的是,由于父进程已经死亡 , 系统会帮助父进程回收处理孤儿进程 。所以孤儿进程实际上是不占用资源的,因为它终究是被系统回收了 。不会像僵尸进程那样占用ID,损害运行系统 。
原文链接:
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用 。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放 。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺 。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系 。
避免方法:
端口占用:lsof -i:端口号或者 nestat
cpu、内存占用:top
发送信号:kill -l 列出所有信号 , 然后用 kill [信号变化] [进程号]来执行 。如kill -9 453 。强制杀死453进程
git log:查看提交记录
git diff :查看变更记录
git merge:目标分支改变,而源分支保持原样 。优点:保留提交历史,保留分支结构 。但会有大量的merge记录
git rebase:将修改拼接到最新,复杂的记录变得优雅 , 单个操作变得(revert)很简单;缺点:
git revert:反做指定版本 , 会新生成一个版本
git reset:重置到某个版本 , 中间版本全部丢失
etcd、Consul
pprof
节省空间(非叶子节点不存储数据,相对b tree的优势),减少I/O次数(节省的空间全部存指针地址,让树变的矮胖),范围查找方便(相对hash的优势) 。
explain
其他的见:
runtime2.go 中关于 p 的定义: 其中 runnext 指针决定了下一个要运行的 g,根据英文的注释大致意思是说:
所以当设置 runtime.GOMAXPROCS(1) 时 , 此时只有一个 P , 创建的 g 依次加入 P, 当最后一个即 i==9 时,加入的最后 一个 g 将会继承当前主 goroutinue 的剩余时间片继续执行,所以会先输出 9 ,  之后再依次执行 P 队列中其它的 g 。
方法一:
方法二:
[图片上传失败...(image-4ef445-1594976286098)]
方法1:to_days,返回给的日期从0开始算的天数 。
方法2:data_add 。向日期添加指定时间间隔
[图片上传失败...(image-b67b10-1594976286098)]
GO语言商业案例(十八):stream切换到新语言始终是一大步 , 尤其是当您的团队成员只有一个时有该语言的先前经验 。现在,Stream 的主要编程语言从 Python 切换到了 Go 。这篇文章将解释stream决定放弃 Python 并转向 Go 的一些原因 。
Go 非常快 。性能类似于 Java 或 C++ 。对于用例 , Go 通常比 Python 快 40 倍 。
对于许多应用程序来说,编程语言只是应用程序和数据库之间的粘合剂 。语言本身的性能通常并不重要 。然而,Stream 是一个API 提供商,为 700 家公司和超过 5 亿最终用户提供提要和聊天平台 。多年来,我们一直在优化 Cassandra、PostgreSQL、Redis 等,但最终 , 您会达到所使用语言的极限 。Python 是一门很棒的语言 , 但对于序列化/反序列化、排名和聚合等用例 , 它的性能相当缓慢 。我们经常遇到性能问题 , Cassandra 需要 1 毫秒来检索数据 , 而 Python 会花费接下来的 10 毫秒将其转换为对象 。

推荐阅读