yejkk / blogcomment Goto Github PK
View Code? Open in Web Editor NEWrecord blog comment
record blog comment
https://www.gamechat.top/2019/09/28/MMKV-%E5%87%A0%E8%A7%81/
引言最近微信开源了 mmkv,之前曾经深为 android 跨进程数据共享和通信所困惑,用 contextprovider 里面 sharedpreference,也曾经考虑过用文件读写来实现,可是 Java 端对文件读写跨进程操作实在是没有很大可操作余地,ndk写的话又太耗时而且无法保障测试性能等等问题。现在开源的 mmkv 正好弥补来这一块空缺,而且结果微信检验,在性能和安全方面感觉还是比较靠
https://www.gamechat.top/2021/06/29/%E9%AB%98%E5%B9%B6%E5%8F%91%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/
引言在关于高并发的思考一文里面,我提出了高并发会导致的问题,在那边文章里最后的结论是高并发在确保底层存储一致性的情况下,最好通过设计来避免。但实际上业务之间的耦合可能往往无法提前预料到,相互的影响要是很频繁的话,实际上很难通过设计来确保。那么我们是不是就需要一种全局锁或者类似的方案来解决这一情况。 redis 的乐观锁在 redis 中,实际上存在一种解决方法。就是通过 WATCH、MULTI、E
https://www.gamechat.top/2020/07/02/redis-%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0/
一直实践以来, redis 的性能很高,且内存占用很小。一直想知道是为什么?这次看 redis 源码,首先就奔着这一点去看了。 redis 底层存储原理使用了 sds 进行存储,其实他就是 c 的 char 指针,所以说其和 c 是无缝贴合的。但是它不在由 c 语言进行管理,而是自定义结构体,里面是长度、可用大小,flag 以及数据。 12345678910typedef char *sds;st
https://www.gamechat.top/2020/11/27/isntall-redis-cluster/
下载新版 redisredis 地址 12345cd /usr/local/redis/wget https://download.redis.io/releases/redis-6.0.9.tar.gztar xzf redis-6.0.9.tar.gzcd redis-6.0.9make 创建路径123mkdir /usr/local/redis-clustercd redis-cluste
https://www.gamechat.top/2022/11/08/ngrep/
抓包一般都有 tcpdump/ngrep,tcpdump 可读性比较差,一般只有在怀疑 tcp 连接出现问题,会用 tcpdump 去查看 tcp 的连接状态。ngrep 对比之下,使用比较方便,基本能满足一般需求。 ngrep tcpdump 过滤规则 支持 host\port\net\proc 支持 host\port\net\proc 易读性 较高(http 协议等很清晰)
https://www.gamechat.top/2021/06/30/%E5%9F%BA%E7%A1%80%E5%9B%9E%E9%A1%BE/
栈和队列javaStack 继承自 Vector,是线程安全的列表实现。Deque 是继承自 Queue,Queue 在 Collection 基础上定义了队列的方法,Deque 在 Queue 基础上定义了双向队列的方法。java 里栈一般推荐用实现了 Deque 的 ArrayDeque 。ArrayDeque 和 Stack 内部实现差不多,都是基于数组实现的,但 ArrayDeque 效率
https://www.gamechat.top/2020/12/15/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B4%A2%E5%BC%95/
引言前几天看到一篇文章,讲了一些数据库的注意事项。里面注意到 mysql innodb 为了避免二次查找用了索引覆盖技术。 详解索引覆盖技术即索引里覆盖了所有的查询结果,可直接返回。这个问题起因是在 innodb 里索引叶子节点存储的是主键,一般情况下还需要用主键进行二次查找,会大幅度降低效率。这一点可以用延迟关联查询和一般查询来进行验证。在其它数据库类似 postgresql 和 sql ser
https://www.gamechat.top/2022/04/08/go-Sleep/
引言time.Sleep(1*time.Second) 这个方法在某些场景很有用,在使用它的时候不由想到。它内部实现原理是什么?如果只是想让出 cpu 时间是不是有更好的方法?执行sleep 后最短回来的时间是多少? 探索分析首先,我们打开 time.Sleep 源码,出乎意料,一个空的方法,瞬间我迷茫了,难道 go 还有这种使用姿势,定义一个空的方法,然后延迟实现?找了半天不得其法,查完资料才发
https://www.gamechat.top/2019/11/14/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6/
背景Ui 自动化测试框架 目标 确保质量 减少人工成本 统一标准 考虑方面 平台支持。 稳定性。 维护成本。 可扩展性。 All: Appium, kobiton, calabash, MonkeyTalkAndoird: robotinum, uiautomator, espressoiOS: XCTest, UIAutomation, Frank, KIF, KiwiAppium +
https://www.gamechat.top/2019/09/18/MVVM-observer/
背景MVVM 是现在 google 推荐的 android 架构方式,而且还推出了 jetpack 套件。基于此套件可以很简单开发一个 MVVM app。 问题livedata 是 google 推出的观察者模式,因为它和 app 的组件(activity、fragment、service)生命周期绑定,所以会确保在生命周期内才会更新数据。 因为 room 组件支持返回 livedata,但是按照
https://www.gamechat.top/2019/08/29/android-%E7%BD%91%E7%BB%9C%E5%BA%93/
网络库重点: 稳定 高效,可以复用连接 有缓存,不用重复请求 okhttp毋庸置疑,使用 okhttp 做为网络框架。 okhttp 已经稳定使用很长时间,应用很广泛。 okhttp 多路复用,有连接池。初步来看时根据 host 等等进行复用。连接池默认是5个,5分钟 提供了 okio 进行读写。Buffer 使用双向链表 segment(segment 还有 compact 和 flit
https://www.gamechat.top/2020/06/01/protobuf-%E5%9C%A8-go-%E8%A1%A8%E7%8E%B0/
protobuf 优势 跨平台跨语言 高效 准备 安装 protobuf 12go install google.golang.org/protobuf/cmd/protoc-gen-gohttps://github.com/protocolbuffers/protobuf 下载最新release 新建 blockchain.proto 1234567891011121314151617
https://www.gamechat.top/2021/04/02/go-%E7%A9%BA%E6%8C%87%E9%92%88%E6%8E%A2%E7%A9%B6/
背景最近发现在空指针上有一些问题,在开发过程中 nil 的判断有时候没有起作用。导致了 panic。 研究go 里面对象从反射看分为 type 和 value 即动态类型和值。在 go 中 nil 也是有类型的,以下是输出 nil 的 type 和 value 1 go 在一般定义对象时候会赋予初始值,如果我们没有设
https://www.gamechat.top/2021/07/26/kafka-%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/
引言提到缓存一般想到的是用 redis 和 memcache,一提到消息队列一般想到的是 kafka。尤其担心自己太片面了,见识跟不上了,毕竟几年前就在用 kafka 在日志和记录方面,就搜了一下发现现在主流的还是 kafka,还有比较新的 RocketMQ(2016年阿里捐献给 Apache)。ActiveMQ 和 RabbitMQ 一般不考虑,毕竟在吞吐量和可靠性不如前面 kafka。 详解k
https://www.gamechat.top/2021/09/23/IO-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/
LinuxIO 中分为 阻塞IO、非阻塞IO、多路IO、信号驱动IO、异步IO。其中阻塞IO、非阻塞IO、多路复用IO、信号驱动IO都属于同步IO。同步IO都是等待响应,异步IO是去做别的。模式名称很明显,其中非阻塞IO只是代表不断去查有没有返回值,不代表交出 CPU。 多路复用IO有 epoll、poll、select 实现。select 对所有流无差别轮询,有最大限制。poll 对所有流轮询,
https://www.gamechat.top/2019/08/29/idleHandler%E8%AF%A6%E8%A7%A3/
引言前几天听同事讲有个 idleHandler 可以不和主线程其它工作争抢,可以做到空闲时候运行。当时想着这一块好像有点印象,记得在看 handler 源码时候看到 message 获取后面还有一段有关 idle 的代码,但是没有细看。这么一想,看源码还是不够仔细啊。虽然感觉这个实际上应该是在 message 为空的时候然后执行任务,思路挺简单明了的。但是今天正好有空,就好好看了一下源码,顺便查漏
https://www.gamechat.top/2023/01/19/brew-%E5%AE%89%E8%A3%85%E6%97%A7%E7%89%88%E6%9C%AC/
序言今天为了跑一个古老的C程序,安装了 libwebsockets 。本以为 brew install 是一件很简单的事情,没想到耗费了一个上午的时间,特此记录一下。 初步探索brew install libwebsockets 运行后,发现安装的是 4.3.2 的版本,本来不关心,但是程序编译时报错,看报错信息时结构体成员找不到。很明显,安装的版本过高导致的,遂找到 4.0.21 的版本想安装。
https://www.gamechat.top/2020/08/18/android-%E7%AD%94%E7%96%91/
json 解析库选择gson,moshi,kotlinx.serialization。gson 是 java 官方推荐的反序列化及序列化Json框架,kotlinx.serialization 是 kotlin 官方推荐库moshi 是 java 和 kotlin 都能使用的库。gson 在 kotlin 里面默认值设置会有问题,一旦没有空的构造方法,就会出现 null,其次和 kotlin 各种
https://www.gamechat.top/2021/02/19/activity-view-draw/
引言activity 生命周期大家都比较清楚,onAttach->onCreate->onStart>onResume->onStop->onDestroy。 但是 activity 的 view 绘制到底发生在什么时候,它的创建、绘制、前台可交互等等的时期。 详解我们在 activity onCreate 里面会设置 setContentView。实际上是创建了一个
https://www.gamechat.top/2020/08/12/%E7%A8%8B%E5%BA%8F%E6%80%9D%E8%80%83/
程序流程出现问题bug、新需求、新的场景要兼容等等 解决问题 为什么会出现这种问题? 问题汇总和细化 问题归类 解决问题方案 该方案会导致其它问题吗?权衡。风险、概率、损失 总结通常来说解决一类问题,都会导致其它问题的发生,所以需要尽量提前预期到。好的设计一个意义在于能通过整体规划来把不可控因素控制在一定范围内。 一个程序在早期就能有意识规避 bug ,那远远好于在后期发现 bug,进行处理,越
https://www.gamechat.top/2021/06/04/%E5%BF%85%E8%A6%81%E5%B7%A5%E5%85%B7%E6%90%AD%E5%BB%BA/
v2ray背景以前一直使用 ssr 搭建,后面被封了几次。就算是在怎么模拟,比如指向自己的博客等等方式来规避,还是不可避免的被彻底封掉了。后面开始计划走 cdn 的方式,这一块 ssr 支持的不好,所以投入了 v2ray 的怀抱,来尝试一下。 步骤 使用官方的脚本命令安装。1bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-
https://www.gamechat.top/2019/08/28/%E8%B8%8F%E4%B8%8A%E5%BE%81%E9%80%94/
开始希望可以坚持最少一周一次频率进行更新。可能有多有少,坚持就是胜利。
引言每次出现奇怪的问题,怎么都查不出来的时候,初步看代码也没什么问题,我大概率怀疑是并发导致的。在某一步因为并发导致数据缺失或者被覆盖。在开发中比较常见的就是资源的查询和更新。如果查询和更新接口并发访问,那么在执行的时候就会有2种可能性。查询在更新前,那么返回给客户端的是旧的数据,服务器后续更新接口返回成功,客户端用哪个就不好说了。查询在更新后,这个是符合预期的结果。如果是2个更新相关的接口同时并
https://www.gamechat.top/2021/01/25/%E8%AF%AD%E8%A8%80%E7%89%B9%E6%80%A7/
引言探究各个语言发展历史和特性 java特性 跨平台 面向对象,多态、继承、封装 双亲委托机制 注解 aop 编程 自动垃圾回收 go一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言 特性 协程 天然的 web server 支持 速度快。 简单,不支持多态等等,也不许内部循环 import 自动垃圾回收
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.