2017年读过的文章

我不喜欢标题党、炒作性质或者没有逻辑的文章,这里汇总的文章是我觉得值得深入阅读的文章。 朱松纯:浅谈人工智能:现状、任务、构架与统一 | 正本清源 当大部分媒体文章都在无原则无下线吹捧人工智能的时候,这篇文章以客观事实为依据,介绍人工智能的历史、研究内容和主要挑战,让你真正明白这个行业到底是干嘛的。 精选机器学习&深度学习视频资源合集 !(附下载链接) How To Become A Machine Learning Engineer: Learning ...

手里要有底牌

今天和甲方撕逼了。 甲方的一个小员工一副咄咄逼人的态度,我被逼得忍无可忍的时候,无奈地说:“我只是一个开发,你有问题和需求OK没问题,能解决的我都帮你解决,解决不了的你去向我们产品反馈,我们走流程帮你解决,你现在直接让我开发人员帮你解决,我已经试了很多方案,解决不了。你已经影响我的开发进度了。” 甲方小员工听到后立刻放低了姿态。我确实很生气的,但是我事后反思,小员工之所以放低姿态,不是因为我生气,而是因为小员工越级让我帮他解决问题 甲方是我公司的客户,小员工和我对接我们是合作关系,你有问题我能帮忙的都帮,不能解决的也给你解决方案了,你还让我帮你弄就过分了。严格来说就是越级,能调我干活的是我的领导, ...

psql学习

前言 最近在用PostgreSQL,偶尔要到测试环境上手动看看数据库的情况,这就用到的psql这个命令。下面简单记录下常用的psql。 链接 psql -U username -W password -h host [dbname] 如果在PostgreSQL所在机器,psql -U username会默认链接到本机的DB环境。 \command psql链接到数据库后,提供了两套命令,一套是SQL命令,一套是psql命令。psql自己的命令都是用\+command的格式,下面列举笔者经常用到的psql命令。 ...

新工作的一些思考

2017.9.15正式从老东家Linker Networks离职,加入灵雀云南京分公司,到现在快一个半月了,总结一下过去的表现和认知。 为公司着想 合同是要寄到北京签的,南京正好有2位新同事一起寄合同。北京hr都是把我俩的材料一起寄过来的。我们填好材料再寄到北京。寄的时候为了保密我和新同事是分开填写材料的,我写好后就直接寄到北京了,没有和另一位同事一起寄。和hr沟通的时候对方专门问了下我们是一起寄的吗。因为邮费是公司出的,所以我认识到hr姐姐把材料一起寄是为了帮公司省钱,而且她还特意问题是不是一起寄的。其实我在寄材料的时候就没有想到一起寄帮公司省钱。 这件小事还是给我很深的感触的,我在做事的时候没有想着帮公司省钱。毕竟是创业公司,还在成长过程中,不能任性花钱。 20-30岁是黄金时期 ...

kde5与archlinux环境下配置libinput-gestures多手势操作

初衷 自己的笔记本是archlinux+kde plasma5的环境,看到同事的macbook pro支持很多手势操作(gestures),自己也希望在archlinux和kde的环境下配置方便的手势操作。 查询资料后发现touchegg和libinput-gestures都可以满足需求,但是在实际配置过程中,touchegg存在很多问题一直都没能解决,而libinput-gestures基本没有太大的问题。所以本文主要介绍如何配置libinput-gestures。 预备知识 计算机窗口管理器 kde是X.Org桌面环境,aur上维护了一个基于X.Org Server的驱动xf86-input-libinput-git,很方便。它们间的关系如下: X11 client在我这里就是kde plasma5。 驱动程序libinput, ...

基础统计知识

基尼系数:反映分配收入分配公平程度的指标,值在[0,1]之间,越小收入分配月公平。公认0.4是警戒线,超过0.4表明收入分配差距较大。根据黄金分割率,0.382是理想的基尼系数。 恩格尔系数:食品支出总额占个人消费支出总额的比重。恩格尔系数达59%以上为贫困,50-59%为温饱,40-50%为小康,30-40%为富裕,低于30%为最富裕。 ...

touchegg config

自己心爱的笔记本是Thinkpad X1 Carbon 5,安装的archlinux和plasma5桌面环境,自己希望通过touchpad(触摸板)支持更多的像Mac那样丰富手势操作,比如三个手指横滑切换桌面,自己偶然发现一款软件touchegg,可以定制手势操作。 一系列配置后我发现我的笔记本存在一下问题: 3指操作无法识别,虽然我的硬件和驱动都支持3指操作,根据arch wiki得到: xinput list-props "SynPS/2 Synaptics TouchPad" | grep Capabilities Synaptics Capabilities ...

关于技术面试

技术职位的面试,主要考察两个方面:技术和人的品质。技术比较好理解,人的品质指人的软实力,它是广义的,只是我用了比较书面的说法罢了。 这里我想讲讲软实力的方面,因为很多时候你在技术上的面试表现已经能让你进入职位候选人中,招聘方会综合每一位候选人的情况后决定录用谁,这时你的品质/软实力是非常重要的。 就我个人而言,我希望告诫自己,无论是什么情况,不管是面试还是工作中,都要保持严谨、专注、认真、负责的态度。这是我经历几次面试后的感触,面试中比较忌讳的一点就是认为自己面试表现还不错,就懈怠或者盲目自信,这让人觉得你这个人不稳重,人家是不会录用你的。 还有一点, ...

wireshark(一):安装和配置

网络是程序员必须掌握的技能,这里从wireshark抓包分析工具wireshark入手,慢慢进入网络的神秘世界。 安装 我的系统环境是archlinux 64bit,wireshark GUI(图形化界面)有GTK和QT两个实现版本,个人使用的qt版本: ➜ ~ pacman -Ss wireshark community/wireshark-cli 2.2.8-1 [installed] a free network protocol analyzer for ...

golang基础

Data race 数据竞争:当多个goroutine并发访问同一个变量,并且至少有一个goroutine对变量进行写操作时,就会发生数据竞争。 go提供了一个内置的数据竞争检测工具: $ go test -race mypkg // to test the package $ go run -race mysrc.go // to run the source file $ go ...

websocket(一)基础

基础 项目中需要用到WebSocket,自己结合wikimedia/WebSocket学习一些基础知识,记录下来,方便复习。 websocket是communication protocal(通信协议) full-duplex(全双工) over single TCP websocket设计之初用于browser和web server之间通信,现在可用于任意实现websocket协议的client和server 一次handshake(握手)后进行Upgrader request(协议升级) low overload(低负荷,不需要header信息) ...

socket学习

overview socket译做套接字,在计算机网络中,用于收发数据的内部endpoint。socket本质上是文件描述符。 handle Handle (computing),handle指计算机中引用的一种资源,是一个抽象的概念。通常包含: file descriptors,文件描述符。 network sockets,网络套接字。 process idendifiers,进程ID。 job IDs,Job ID。 进程ID和jobID可以用整数表示。文件描述符和套接字也可以表示成整数, ...

Bash工作原理

Bash是一种Shell实现,所以先介绍下Shell。 shell Shell不是具体指那个程序,它是一个概念上的统称。从Linux系统角度,Shell是用户和操作系统间的接口。 shell有壳的意思,形象一点说,Linux系统的shell就像操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。解释执行用户输入的命令。 Shell有很多具体实现: Bourne shell(sh) C shell(csh) Bash Bash工作原理 Bash的工作原理可以介绍得很深,但是笔者才疏学浅,这里只简单从进程角度谈谈bash以及bash启动的命令间的关系。 ...

用户空间和内核空间

前言 用户空间和内核空间是将内存一部分给内核用,一部分给用户进程用,注意用户空间和用户态以及内核空间和内核态之间的区别。 用户空间与内核空间 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节( ...

Cassandra数据库知识点

之前公司的项目中使用过一段时间Cassandra数据库,这里整理下相关知识点。 特点 NoSQL中的列式数据库 P2P的去中心化架构 使用DHT(分布式哈希表)将key分布到不同的节点中 极高的读写性能 部署简单(3台机器就可以部署一个集群) 架构 Gossip 内部P2P通信协议, 定期交换node位置信息、状态信息和数据。 Partitioner,决定数据如何分配到节点。 Replica placement strategy,备份策略。 Snitch,集群的网络拓扑,负责路由client的CRUD等请求。 读写原理 ...

读《开源世界旅行手册》

这是一本在线书籍,地址开源世界旅行手册,书的内容很广,补充了笔者的知识系统。这里笔者摘抄部分自己还不熟悉的部分记录下来,方便日后复习 UNIX缩写风格 原文地址 这一章节介绍了UNIX系统里一些命令的缩写规则,一些常用命令选项的含义,帮助笔者理解了一些命令的含义。这里摘抄部分笔者不太熟悉的: 最常见的缩写,取每个单词的首字母 dd Disk Dump df Disk Free du Disk Usage ps Processes Status ...

Golang逃逸分析

简介 编译代码时,编译器根据分析,判断将变量分配在栈或堆上。 一般情况 函数定义中,一般将局部变量和参数分配到栈上(stack frame)上。但是,如果编译器不能确定在函数返回(return)时,变量是否被引用(reference),分配到堆上;如果局部变量非常大,也应分配在堆上。 如果对变量取地址(*和&操作),则有可能分配在堆上。此外,还需要进行逃逸分析( ...

程序中的堆和栈

程序在执行时,会把代码加载到内存,结合CPU进行运算。本文主要介绍程序代码如何在内存上分配的。注意,这里的堆栈概念是程序执行的角度,不是算法的角度。 分配和释放 堆 heap 堆上的数据由工程师通过代码主动分配和释放,若工程师没有释放,垃圾回收机制(GC)或者程序退出是操作系统(OS)释放。 栈 stack 由操作系统分配释放,主要用来存放函数参数、临时/局部变量。 存储方式 堆 内存上的二级缓存, ...

雨痕 Go语言学习笔记-进阶

内存布局 string是指针,指向底层byte数组 slice是指针类型,slice由3部分组成:底层数组指针,len,cap interface也是指针类型,由两部分组成: *Itab,表明指针对应数据的类型 *data,指向指针代表的数据 new,创建对象,返回指针 make,只初始化slice,channel,map。返回值不是指针,但是slice,map,channle是指针类型: slice: ...

雨痕 Go语言学习笔记-工作空间

工作空间 可在 GOPATH 环境变量列表中添加多个⼯作空间,但不能和 GOROOT 相同 通常 go get 使⽤第⼀个⼯作空间保存下载的第三⽅库 源文件 注释:⽀持 "//"、 "/**/" 两种注释⽅式,不能嵌套 命名:采⽤ camelCasing ⻛格, ...

雨痕 Go语言学习笔记-并发

Goroutine 通过go关键字创建并发执行单元,有调度器安排到适合的系统线程执行 调度器不能保证多个 goroutine 执⾏次序,且进程退出时不会等待它们结束 默认情况下,进程启动后仅允许⼀个系统线程服务于 goroutine。可使⽤环境变量或标准库函数runtime.GOMAXPROCS修改,让调度器⽤多个线程实现多核并⾏,⽽不仅仅是并发(注意并行和并发的区别) 调⽤runtime.Goexit将⽴即终⽌当前goroutine 执⾏,调度器确保所有已注册 ...

雨痕 Go语言学习笔记-接口

接口 接⼝命名习惯以 er 结尾,结构体 接⼝没有数据字段 可在接⼝中嵌⼊其他接⼝ 执行机制 接⼝对象由接⼝表 (interface table) 指针和数据指针组成 接⼝表存储元数据信息,包括接⼝类型、动态类型,以及实现接⼝的⽅法指针。 ...

雨痕 Go语言学习笔记-方法

方法定义 ⽅法总是绑定对象实例,并隐式将实例作为第⼀实参 (receiver) 函数和方法有区别,方法和实例绑定,会改变实例状态,方法不会 不⽀持⽅法重载,receiver 只是参数签名的组成部分。(重载,参数和返回值不同的同名函数,实际是函数签名不同) 可⽤实例 value 或 pointer 调⽤全部⽅法,编译器⾃ ...

雨痕 Go语言学习笔记-数据

Array 和以往认知的数组有很⼤不同。 • 数组是值类型,赋值和传参会复制整个数组,⽽不是指针。 • 数组⻓度必须是常量,且是类型的组成部分。 [2]int 和 [3]int 是不同类型。 • ⽀持 "=="、 "!=" 操作符,因为内存总是被初始化过的。 • 指针数组 [n]*T,数组指针 *[n]T 多种初始化方法 a ...

雨痕 Go语言学习笔记-函数

函数定义 不⽀持 嵌套 (nested)、重载 (overload) 和 默认参数 (default parameter)。 • ⽆需声明原型。 • ⽀持不定⻓变参。 • ⽀持多返回值。 • ⽀持命名返回参数。 • ⽀持匿名函数和闭包。 函数是第⼀类对象,可作为参数传递。建议将复杂签名定义为函数类型,以便于阅读。 func test(fn func( ...