编程
文章平均质量分 87
网络安全研发随想
这个作者很懒,什么都没留下…
展开
-
大数据技术笔记
大数据技术是一系列的工具和方法,它们可以帮助我们收集、存储和分析大量的数据,并将结果呈现给我们。原创 2023-11-02 16:20:27 · 388 阅读 · 0 评论 -
Java Netty NIO网络编程入门
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。原创 2022-10-27 16:58:07 · 286 阅读 · 0 评论 -
一文搞懂消息队列
消息队列(Message Queue),简称为MQ,是一种跨进程的通信机制,用于上下游传递消息。常见消息队列中间件如:Kafka、ActiveMQ、RabbitMQ、RocketMQ等。原创 2022-05-06 14:00:46 · 1761 阅读 · 0 评论 -
深入理解 gRPC 协议--理解protobuf/.proto/http2
RPC 无非是做两件事情:一是数据编码,二是请求映射。原创 2021-09-27 10:57:23 · 4161 阅读 · 0 评论 -
java服务端开发笔记
大概有六七年没接触java了,因为工作需要,重新拾起java。原创 2021-06-14 16:09:27 · 1794 阅读 · 0 评论 -
Rust FFI 编程--理解不同语言的数据类型转换
"FFI"是" Foreign Function Interface"的缩写,大意为不同编程语言所写程序间的相互调用。鉴于C语言事实上是编程语言界的万国通,世界通用语。对于其它语言(比如python/go),如果将 Rust 库的公共接口转换为应用程序二进制接口( C ABI),则在其它编程语言(比如python/go)中可以相对容易地使用它们。原创 2021-05-06 16:21:24 · 1274 阅读 · 1 评论 -
go-plugin入门
go-plugin是基于RPC的Go(golang)插件系统(Go Plugin System over RPC)。这是HashiCorp工具使用超过4年的插件系统。原创 2021-04-20 17:06:46 · 1717 阅读 · 0 评论 -
go并发编程-理解不同并发场景下的go原语
虽然在 go 中,并发编程十分简单,我们只需要使用 go func() 就能启动一个 goroutine 去做一些事情,但是正是由于这种简单我们要十分当心,不然很容易出现一些莫名其妙的 bug。原创 2021-02-24 18:46:20 · 656 阅读 · 0 评论 -
rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio
通常我们将消息通信分成同步和异步两种:- 同步就是消息的发送方要等待消息返回才能继续处理其它事情- 异步就是消息的发送方不需要等待消息返回就可以处理其它事情很显然异步允许我们同时做更多事情,往往也能获得更高的性能。异步编程,是一种被越来越多编程语言支持的并发编程模型。异步和协程类似,相比多线程来说,异步运行时可以使用少量线程来处理大量任务。原创 2021-04-12 20:56:46 · 6137 阅读 · 1 评论 -
理解云原生--开发模型、架构原则、主要技术
云原生架构旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。原创 2021-02-16 14:16:27 · 693 阅读 · 1 评论 -
linux内核数据结构实现--链表、队列和哈希
C是面向过程的语言,但是linux内核却用C实现了一套面向对象的设计模式,linux内核中处处体现着面向对象的思想。原创 2021-01-09 22:18:44 · 895 阅读 · 0 评论 -
go语言特性理解--变量/函数/面向对象/并发编程/错误处理
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。原创 2021-01-08 15:16:11 · 310 阅读 · 0 评论 -
调试器工作原理--CPU软件断点/硬件断点/单步执行标识
断点和单步执行是两个经常使用的调试功能,也是调试器的核心功能。断点是调试器的最常用技术之一。其基本思想是在某一个位置设置一个陷阱,当CPU执行到此位置时,中断到调试器中,让调试者分析和调试,之后恢复执行。单步执行是最早的调试方式之一。就是让应用程序按照某一个步骤单位一步一步执行。一般的做法是,先使用断点功能将程序中断到感兴趣的位置,然后再单步执行关键的代码。原创 2020-12-30 14:09:05 · 5650 阅读 · 0 评论 -
图算法--深度优先/广度优先/最小生成树/最短路径
1. 深度优先搜索1.1 标记法探索迷宫探索迷宫而不迷路的一种古老办法叫做Tremaux搜索(标记法),要探索迷宫中的所有通道,我们需要:选择一条没有标记过的通道,在你走过的路上铺一条绳子;标记所有你第一次路过的路口和通道;当来到一个标记过的路口时(用绳子)回退到上个路口;当回退到的路口已没有可走的通道时继续回退。绳子可以保证你总能找到一条出路,标记则能保证你不会两次经过同一条通道或者同一个路口。1.2 深度优先搜索算法和Tremaux搜索类似,深度优先搜索,只需用一个递归方法来遍历所原创 2020-12-27 22:05:21 · 3005 阅读 · 0 评论 -
在线内存泄露定位--memleak工具
1. top + ps用 top 或 ps 来观察进程的内存使用情况,然后找出内存使用一直增长的进程2. memleak使用专门用来检测内存泄漏的工具,memleak。memleak 可以跟踪系统或指定进程的内存分配、释放请求,然后定期输出一个未释放内存和相应调用栈的汇总情况(默认 5 秒)。$ /usr/share/bcc/tools/memleak -p $(pidof app) -aAttaching to pid 12512, Ctrl+C to quit.[03:00:41] Top原创 2020-12-24 18:48:42 · 3329 阅读 · 1 评论 -
方便好用的在线CPU性能调优工具--perf的常见用法
perf 是 Linux 2.6.31 以后内置的性能分析工具。它是一款综合性分析工具,以性能事件采样为基础,可以分析从内核级别,到进程线程级别,甚至到函数及汇编级别的性能问题。原创 2020-12-24 18:22:43 · 793 阅读 · 1 评论 -
Rust是如何实现内存安全的--理解RAII/所有权机制/智能指针/引用
不带自动内存回收(Garbage Collection)的内存安全是Rust语言最重要的创新,是它与其他语言最主要的区别所在,是Rust语言设计的核心。原创 2020-12-20 01:50:48 · 4263 阅读 · 2 评论 -
编程的本质--深入理解类型系统/泛型/函数式编程/面向对象编程
编程语言发展到今天,出现了好多不同的代码编写方式,但不同的方式解决的都是同一个问题,那就是如何写出更为通用、更具可重用性的代码或模块。原创 2020-12-20 00:33:30 · 1413 阅读 · 3 评论 -
python编程总结
1. 编码Python3有两种表示字符序列的类型:bytes和str,前者的实例包含原始的8bits value,后者的实例包含Unicode字符。Python2也有两种表示字符序列的类型,str和unicode,str的实例包含原始的8bits value,unicode的实例包含Unicode字符。把Unicode字符表示为二进制数据(原始的8bits value)有很多方法,常见的就是utf-8编码。但是,python3的str实例和python2的unicode实例都没有和特定的二进制编码形原创 2020-06-11 15:03:31 · 344 阅读 · 0 评论 -
重新学习c++--理解引用、智能指针、虚函数、模板、容器
最近几年用c和python比较多,上次用c++写程序已经是几年前的事情了。温故而知新,是时候重新学习下c++了。1. c++是一个语言联邦C++是一个语言联邦,可以分成四大联邦去理解,每一个联邦都有自己的世界观和理解方式。Cc++仍以C为基础,区块blocks、语句statements、预处理器preprocessor、内置数据类型、数组、指针都来自C。Object-Oriented ...原创 2020-04-12 01:28:40 · 612 阅读 · 0 评论 -
分布式列数据库--理解hbase列存储机制、架构、表结构设计、命令操作
1. HBase简介HBase是Hadoop Database的简称,是建立在Hadoop文件系统之上的分布式面向列的数据库。HBase和HDFSHDFS适用于存储大容量文件的分布式文件系统,不支持快速单独记录查找,提供了高延迟批量处理,但是没有批处理的概念;提供的数据只能够顺序访问;HBase是建立在HDFS之上的数据库,提供在较大的表快速查找,提供了数十亿记录低延迟访问单个行记录(随机...原创 2020-04-10 10:43:40 · 1929 阅读 · 0 评论 -
python coroutine,go routine对比--理解多线程、协程
1. 进程 vs 线程 vs 协程1.1 上下文切换linux系统中,处理器总处于以下状态中的一种:内核态,运行于进程上下文,内核代表进程运行于内核空间;内核态,运行于中断上下文,内核代表硬件运行于内核空间;用户态,运行于用户空间;一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。用户级上下文: 正文、数据、用户堆栈以及共享存储区;寄存器上下文:...原创 2020-04-08 17:10:37 · 1242 阅读 · 0 评论 -
查找、插入、删除都很快的数据结构(散列表vs红黑树vs跳表)
散列表散列表的插入、删除、查找操作的时间复杂度可以做到常量级的 O(1),非常高效。平衡二叉查找树(红黑树)二叉查找树在比较平衡的情况下(红黑树是一种平衡二叉树),插入、删除、查找操作时间复杂度是 O(logn)。跳表跳表,插入、删除、查找操作时间复杂度是 O(logn)。散列表 vs 二叉查找树相对散列表,二叉查找树好像并没有什么优势,那我们为什么还要用二叉查找树呢?第一,...原创 2020-01-30 14:08:05 · 7042 阅读 · 0 评论 -
ffmpeg视频处理
一、视频处理概念1.1 容器视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。一般来说,视频文件的后缀名反映了它的容器格式,比如:MP4/MKV/WebM/AVI。1.2 编码格式视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。常用的视频编码格式:H.262/H.264/...原创 2020-01-20 16:05:39 · 384 阅读 · 0 评论 -
五分钟入门rust语言
1. 入坑rust1.1 rust发展历程2006年,Mozilla 员工 “Graydon Hoare” 开发了Rust。2015年5月15日,Rust编程语言核心团队正式宣布发布Rust 1.0版本,之后连续4年,在Stack Overflow开发者「最受喜爱编程语言」评选中获得第一名。2019年7月4日,社交网络巨头Facebook联合其他100个行业巨头,对外宣布准备建设Libr...原创 2020-01-15 19:11:30 · 23368 阅读 · 3 评论 -
linux bug定位神器——lsof | grep 简直不能太好用
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。lsof | grep 简直不能太好用COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE...原创 2019-12-09 11:21:28 · 1693 阅读 · 0 评论 -
编程语言的语法和语义
为了完整地定义编程语言,我们需要: 语法,描述程序看起来是什么样的; 语义,描述程序的含义。原创 2016-02-28 22:48:16 · 8920 阅读 · 0 评论 -
Mysql主从复制
1. 为什么需要主从复制如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器。 在主从服务器上分开处理用户的请求,可获得更短的响应时间。 用从服务器做数据备份而不会占用主服务器的系统资源。2. mysql支持的复制类型基于语句的复制 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时...原创 2016-03-31 00:00:45 · 394 阅读 · 0 评论 -
MySQL的两个存储引擎--MyISAM和InnoDB
MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。流行使用的有两个:MyISAM和InnoDB1. MyISAM存储引擎MyISAM存储引擎是MySQL官方提供的存储引擎。其特点是不支持事务、支持表锁和全文索引,对于一些在线分析处理操作速度快。表锁的并发读没有问题,但是并发插入性能就差一些。由于不支持事务,MyISAM容易丢失数据。MyISAM存储引擎,每一个表都被...原创 2016-03-30 00:13:58 · 798 阅读 · 0 评论 -
《Android开发精要》读书笔记——Android应用模型
Android应用模型的设计思想取自于web2.0的Mashup概念,是基于组件的应用设计模式。在该模型下,每个应用都由一系列的组件搭建而成,组件通过应用的配置文件描述功能。Android依照组件的配置信息,了解各个组件的功能并进行调度。 Android中有四大组件,分别是界面组件Activity、服务组件Service、数据源组件Content Provider以及触发器组件Broadcast...原创 2016-03-01 10:53:21 · 1607 阅读 · 0 评论 -
ios开发初体验
界面布局ios的界面布局大概分为两种:Frame-Based Layout和Auto Layout。 这么理解: Frame-Based layout就是定义某一个button相对父容器position和size。 AutoLayout可以只定义一个button的size,position自动通过constraint计算,constraint类似html布局的css规则,UIStac...原创 2015-12-30 18:16:03 · 547 阅读 · 0 评论 -
无锁数据结构--理解CAS、ABA、环形数组
CAS同步原语无锁算法 (lock-free algorithm) 和 无等待算法 (wait-free algorithm) 的近代起源可以追溯到Herlihy的论文 Wait-free synchronization,1991。在此之前,计算机硬件所提供的同步原语 (synchronization primitives) 只有原子寄存器 (atomic registers) 和少数经典原语比...原创 2019-03-12 16:00:26 · 3300 阅读 · 0 评论 -
这些年我用过的编程语言
好久没做总结了,今天闲来无事,写写最近一段时间在编程语言上的体会吧。原创 2015-12-18 17:02:17 · 690 阅读 · 0 评论