[置顶] 关于中文编程的一些思考

0. 为什么写这篇文章 笔者曾写过一篇《我眼中的C语言及其起源》(在其他地方叫《C语言发展史的点点滴滴》)的文章,文中从历史角度结合Unix系统源码来追溯了C语言的起源以及发展史(C语言的伟大毋庸置疑,但是其他语言带来的多样化也是十分重要),至于文章内容这里就不做过多赘述,感兴趣的读者可以查看原文。 本文则缘起于,在头条转载的本文评论中一位读者提到的一句话:"国产易语言在角落瑟瑟发抖"。看到这句话之后,顿时就对中文编程语言的原理产生了兴趣。由于平时业务开发过程中使用的主要语言是PHP/Golang,所以就从某种角度出发,并结合PHP、编译原理来分析一下中文编程语言的某些相似性原理。如果感...

PHP,Golang,编程原理 2021/11/16 637℃ 0条

[置顶] 初识Golang汇编

0. 为什么写本文 在分析go的某些特性底层功能实现时发现:很多跟runtime运行时有关,而要掌握这一部分的话,有一道坎是绕不过去的,那就是Go汇编。索性就查阅了一些资料,在阅读之余整理总结了一下,并分享给大家。 (本文使用Go版本为 go1.14.1) 1. 为什么需要汇编 众所周知,在计算机的世界里,只有2种类型。那就是:0和1。 计算机工作是由一系列的机器指令进行驱动的,这些指令又是一组二进制数字,其对应计算机的高低电平。而这些机器指令的集合就是机器语言,这些机器语言在最底层是与硬件一一对应的。 显而易见,这样的机器指令有一个致命的缺点:可阅读性太差(恐怕也只有天才和疯子才有能力...

Golang,编程原理 2021/11/17 538℃ 0条

利用质数随机遍历集合的一种实现

有个随机遍历数据集合的需求,描述如下: ① 从集合的某个随机位置开始遍历 ② 随机获取集合中剩余数据 ③ 重复步骤②,直到遍历完整个集合 当看到这个需求时,不知道你是否会想到什么实现方式? 最近在追溯go底层源码时发现,在调度器从其他 P 中 steal 可用 goroutine 时利用质数的特性,采用了一种特殊算法随机遍历 allp 数组。觉得很是经典,特此记录一下。 例如:通过下标随机遍历数组中的 8 个元素,则最终遍历数组的下标可能是 [0,1,2,3,4,5,6,7] 中的任意一种随机排列。 遍历步骤: ① 计算小于等于 count (这里是8) 的所有质数,得到数组 [1,3...

Golang,算法技巧 2022/05/10 48℃ 0条

Innodb引擎可重复读的幻读现象

关于幻读 众所周知,MySQL不同的隔离级别可能会出现不同的问题。其中,有一问题就是在可重复读隔离级别会出现幻读问题。可能会有人说:不是说MySQL的可重复读隔离级不会出现幻读吗?怎么会出现幻读? 这里有2个问题需要明确: ① MySQL官方并未说明可重复读隔离级别不会出现幻读 ② 什么是幻读 问题① 查看MySQL官方相关资料,官方也会标明可重复读隔离级别可能会出现幻读 问题② 要理解幻读是可见与不可见的一种权衡。如果用一句话说明,那就是:幻读是看不到数据,却能感受到它存在的一种现象 产生幻读的本质是不同读的方式:当前读 or 快照读,这两种方式的选择 数据库中数据操作方式,一般分...

数据库 2022/05/08 31℃ 0条

go字符串无拷贝转换切片的一个问题

1.字符串无拷贝转换切片 提起 字符串无拷贝转换切片 这个话题,可能很多人会想到下面一段代码: func string2Slice(s string) []byte { return *(*[]byte)(unsafe.Pointer(&s)) } 这段代码利用了指针进行强转,并且在实现过程中不会出现数据拷贝,简单、强大! 2.同一切片多次获取容量结果不相同 来看一个测试用例: package test import ( "fmt" "testing" "unsafe" ) func string2Slice(s string) []byte ...

Golang,编程原理 2022/04/22 63℃ 0条

认识智能语音呼叫系统

1. 什么是智能语音系统 现实生活中,会遇到下面一些场景: 1.对着iPhone说"hey, siri" 2.对着智能音响说"天猫精灵","小爱同学","小度小度" 3.对着导航说""要到XXX,请帮我规划路线" 4.接到阿里云打来的服务报警电话 5.接到银行、通讯服务商、电商平台的推销电话 6.机器人在线客服 ... 对于上面的场景,不知道你遇到过或用过多少。他们有一个共同的特点:人机交互;他们有一个通用的叫法:智能语音系统。 说起智能语音系统,很多人可能第一次听说。不理解没关系,在这里跟随我的步伐一起来看看这是个什么东西。 如果对 智能语音系统 这个专业名词进行拆解,大概可以拆分为...

系统架构 2022/04/12 60℃ 0条

go泛型中类型参数列表为什么用中括号?

2022.3.15当天,在国内打假国人声讨奸商的时候,go官方发布了1.18版本。对于该版本来说,可能是近几年发生变化最大的一个版本。因为,有一个千呼万唤始出来的功能:泛型(Generics)。说起泛型,那些熟悉C++、Java的开发人员可能并不陌生。但是,对于那些没有接触过泛型的人来说,就需要花点时间来适应这一特性。 官方博客: Go 1.18 is released! (https://go.dev/blog/go1.18) 1. go泛型 talk is cheap, show the code。 对于常见的:求两个有符号整数最大值这个功能 准备了两份代码,分别是未使用泛型以及...

Golang,编程原理 2022/03/26 256℃ 0条

golang工程师面试总结

笔者作为Golang面试官,曾经面试过不少候选人。在面试的过程中,一般会根据公司需要制定一些面试规则,例如:面试题型、面试分数占比、面试时间等等。在面试过程中也会记录候选人的表现,并在面试结束之后提交面试评语。 鉴于以往的面试经验,整理出本文,希望对那些正在准备面试的人有所帮助。 1. 基础能力 1.进程、线程、协程三者的关系与区别 拓展题 问题1:go的GMP模型以及三者关系 问题2:进程的内存布局大概分为几块? 问题3:用户空间与内核空间的区别? 问题4:上下文切换时一般需要做什么操作? 2.sync、context包的常用方法以及使用场景 拓展题 问题1:进程间通信的实现方式...

面试经验 2022/03/24 321℃ 0条

MySQL主键ID耗尽时会发生什么

说起流行的关系型数据库,MySQL一定会被提及。在使用MySQL的过程中,创建表时需要指定主键id,其类型一般为int或者bigint类型。但是,有这么一个问题,不知道你可曾想过:MySQL主键id耗尽时会发生什么? 为什么会想到这个问题呢?缘起于,笔者在某家公司偶然发现一张表竟然有30多亿条数据(2年多时间)。 表字段不多,数据+索引占用磁盘空间就将近1000G。 抛开数据同步以及数据恢复时会遇到的问题不说,仅仅是表主键id就是很大的消耗。 MySQL整型类型与取值范围 MySQL 支持 SQL 标准的整型类型:INTEGER(或 INT)和 SMALLINT。作为标准的扩展,My...

数据库 2022/03/23 280℃ 0条