摘要: 几个概念 "Linux进程和线程" 用户态和内核态 系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)// 参考附录4 内核虚拟内存的构造 // 参考附录1 以32位为例,有4G虚拟地址空间。 用户代码可以访问3G的内存空间,内核代码可以访问1G的内存空间,分别就对应程序用户 阅读全文
posted @ 2020-02-29 22:49 sicnu-yudidi 阅读(144) 评论(0) 推荐(0)
摘要: 主要有两个原因: 1. 平台(移植性)原因: 不是所有的硬件平台都能够访问任意地址上的任意数据。例如:特定的硬件平台只允许在特定地址获取特定类型的数据,否则会导致异常情况。 2. 性能原因: 若访问未对齐的内存,将会导致 CPU 进行两次内存访问,并且要花费额外的时钟周期来处理对齐及运算。而本身就对 阅读全文
posted @ 2020-02-28 20:34 sicnu-yudidi 阅读(290) 评论(0) 推荐(0)
摘要: "【转载】队友博客" Q: 为啥要字节对齐的 https://www.nowcoder.com/discuss/57978 TODO: Q: go反汇编指令 Q: a[0]:(int32,0,5)(int32,3,5) 3可以append,0不可以append. Q: 如何证明slice底层函数被修 阅读全文
posted @ 2020-02-22 13:52 sicnu-yudidi 阅读(128) 评论(0) 推荐(0)
摘要: "预备知识: Linux命令" "预备知识:namespace和cgroup(CentOS7.7)" "一,exec替换进程映像" 函数功能: 用exec函数可以把当前进程替换为一个新进程,且新进程与原进程有相同的PID 例如:在shell命令行执行ps命令,实际上是shell进程调用fork复制一 阅读全文
posted @ 2020-02-18 23:34 sicnu-yudidi 阅读(251) 评论(0) 推荐(0)
摘要: 题干 在一个长度为n的数组里的所有数字都在0到n 1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 直觉思路 1. 排序 O(n 阅读全文
posted @ 2020-02-18 16:21 sicnu-yudidi 阅读(95) 评论(0) 推荐(0)
摘要: "3.数组中重复数字:每个位置放置数字与下标对应相等 O(n)" "4.二维数组中的查找:右下角开始比较 O(m+n)" 5.替换空格:python直接替换 "6.从尾到头打印链表: 借助栈或直接利用系统调用栈" // 创建链表(设置next节点时就会创建下一个节点), 打印链表(最后打印nil) 阅读全文
posted @ 2020-02-18 14:12 sicnu-yudidi 阅读(193) 评论(0) 推荐(0)
摘要: 面试官:你了解乐观锁和悲观锁吗? 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。 悲观锁的实现方式是加锁,加锁既可以是对代码块加锁(如Java的synchronized关键字),也可以是对数据加锁(如MySQL中的排它锁)。 乐观锁的实现方式主要有两种: "CAS机制" 和版本号机制, 阅读全文
posted @ 2020-02-15 13:53 sicnu-yudidi 阅读(115) 评论(0) 推荐(0)
摘要: 主要回答一下几个问题 1.单核并发问题 2.多核并发问题 2.几个不正确的同步案例 1.单核并发问题 先看一段go(1.11)代码: 单核CPU,1万个携程,每个携程执行100次+1操作, 思考n最终会打印多少? 0++ sleep切换 1++ sleep切换 打印2,退出 您说的没错,我写了一段新 阅读全文
posted @ 2020-02-15 13:21 sicnu-yudidi 阅读(754) 评论(0) 推荐(0)
摘要: 预备知识 CAS机制 1. 是什么 参考附录3 CAS 是项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并 ,而是被告知这次竞争中失败,并可以再次尝试。 CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新 阅读全文
posted @ 2020-02-14 16:17 sicnu-yudidi 阅读(429) 评论(0) 推荐(0)
摘要: "概览最简单版的mutex(go1.3版本)" "预备知识" 主要结构体 func (m Mutex) Lock() { // 情况1: CAS1直接加锁成功 // Fast path: grab unlocked mutex. if atomic.CompareAndSwapInt32(&m.st 阅读全文
posted @ 2020-02-07 11:32 sicnu-yudidi 阅读(547) 评论(0) 推荐(0)