Go Unsafe
看了一些关于unsafe包的文章,长话短说: unsafe.Pointer就是一个纯指针, 它很聪明, 如果对象改变了地址它也会自动改变.并且保持对对象的引用, 这样对象不会被回收. uintptr就是一个比较大的整型, 能容下任何指针地址, 但是这个不会跟随对象改变地址…而且对象还会被回收…
看了一些关于unsafe包的文章,长话短说: unsafe.Pointer就是一个纯指针, 它很聪明, 如果对象改变了地址它也会自动改变.并且保持对对象的引用, 这样对象不会被回收. uintptr就是一个比较大的整型, 能容下任何指针地址, 但是这个不会跟随对象改变地址…而且对象还会被回收…
受@idiotc4t所托, 我拿到了一个Java项目, 目的是要把这玩意编译出来, 最初我还以为和以前的Java项目类似, 只要mvn build 就能一了百了, 没想到这次拿到的是一个使用gradle构建的项目. gradle的出现比maven晚, 它们都是用来构建运行在JVM上的应用使用的, gradle可以使用编程语言来自定义你的构建流程, 类似C的makefile(这个比喻不太好其实), 或者是JavaScript的gulp. gradle解决了maven的一些特点, 比如xml的配置繁琐, 看着就头大, 以及构建步骤的灵活控制. 总之很牛逼就是了, 也比较难上手. ...
闲来无事在网上翻一些关于 Javascript 的一些搞基技巧,就发现了节流与防抖这两种设计模式。 上个星期在编写搜索框的时候就已经写过类似的代码 (搜索框输入关键词会实时去服务器上搜索,考虑到服务器压力就把代码加了限制,每 500ms 最多搜索一次,实际上这就是类似防抖的设计,只是我还不知道这个叫防抖…) ...
最近一直在写 Vue, 在公司的项目里使用的是Composition Api + Vue2 的组合. (因为公司里考虑到同事的技能树, 没有用vue3和Typescipt). CA 是 Vue3 追加的全新 API. 用到 Vue2 里可能有点怪怪的. 不过 CA 是以 Vue-Plugin 的方式提供的 API, 所以使用起来非常方便. 同时也鼓励更多人使用这个API. ...
本文主要讲关于SELECT语句的优化问题. 会涉及到一些关于表索引的知识. 性能 很简单, 你每建立一个索引, 数据库就会根据索引类型,帮你建立一个索引数据结构(B+树非常常用). NOTE:B+树 B+树对范围查询和直接查询都很在行. 直接查询的时间复杂度均为O(log), 也就是用的二分法, 具体为什么就去看B+树的数据结构, 在看B+树之前最好先看B树, 不然东西太多消化不了. ...
实际上Go的map和Java7之前的HashMap, 非常相似。都是Array + LinkedTable的结构。 结构 map数据结构由runtime/map.go/hmap定义: 1 2type hmap struct { 3 count int // 当前保存的元素个数 4 ... 5 B uint8 // 指示bucket数组的大小 6 ... 7 buckets unsafe.Pointer // bucket数组指针,数组的大小为2^B 8 ... 9} bucket数据结构由runtime/map.go/bmap定义: ...
我们先来看这样一段代码: 1 2impl View for Button { ... } 3 4impl View for Text { ... } 我们看到Button和Text都实现了View属性, 抽象是一种不错的设计程序的方法, 帮助我们透明化的使用外部提供的API. 然后我们可能会下意识的写出下面的代码: ...
本文主要讲的是目前存在的几种缓存算法, 没错, 我又来误人子弟了. 内容会围绕近几年比较流行的LFU, LRU, 还有W-TinyLRU这么三种缓存算法来讲, 尽量使用最简练的文本. LFU 近期最少使用算法,即LFU算法(Least Frequently Used algorithm)。 这种算法会淘汰近期最少访问的缓存, 仔细分析一下, 没错,这是一种非常合理的算法,因为到目前为止最少使用的页面, 很可能也是将来最少访问的页面。 该算法既充分利用了内存中缓存调度情况的历史信息,又正确反映了程序的局部性。 ...
昨天算是完成了第一个前端上需求.来讲讲成果吧. (其实根本无关紧要) 看了SVN记录,整个项目第一次提交是在2018年. (立项的时间感觉肯定更早) 整体技术使用的基本时原生JS(没有ES6) + Jquery. 项目代码风格凌乱. 肯定有好几个人接手过了. ...
差不多可以看消息队列的源码了。 在下从gitee上找到了rocketmq的早期版本(3.2.2), 坏消息是这个2014年的项目里没有单元测试极少, 调试会比较困难. 好消息是这个时候的RocketMQ还没开源多久,里面有很多中文注释。看起来会很舒服。 ...