- 博客(62)
- 收藏
- 关注
原创 protobuf
编码Base 128 Variant这是一种基于 7 bit(即 128)的变字节长度的编码。小端存储(least significant group first)。最高有效位( most significant bit,MSB):1 表示下一个字节也用来表示该数,0 表示这是该数的最后一个字节。Message Structurekey-value :二进制表示为 key-value-key-value-... 。field number - wire type:参考[1] pro
2022-05-25 20:13:06
195
原创 c/c++判断NULL指针
结论只有通过指针读取指针时,编译器才会判断指针的有效性。实验offsetof()函数struct A { int x; char y; long z;};int main() { int offset = ((struct A*)NULL)->y; // 即 offsetof()的实现方法 printf("offset of y: %d\n", offset); // 打印 4,不会报错}以上就是c语言的宏函数offsetof的原理,其定义如下:#define of
2021-12-17 21:53:32
2044
原创 shell exit命令及父子进程的理解
实验情形1直接在终端中执行exit:$ exit 1这时候,终端会直接退出(logout)。情形2我们新建一个文件 test.sh,写上以下内容:exit 1然后再在终端中执行:$ bash test.sh这时候,终端不退出,并且能够捕获上一次命令的执行状态:$ echo $?结果:1。情形3还是执行上述test.sh文件,但是我们不使用bash命令,而改用source命令:source test.sh结果:终端退出。分析情形1和情形2的区别在哪里呢
2021-11-16 17:42:56
2863
原创 Android异步消息机制
异步消息机制MessageMessage是在线程之间传递的消息,可以在内部携带少量信息。成员:what, arg1, arg2Handler用于发送和处理消息。成员方法:sendMessage()handleMessage()MessageQueue消息队列,用于存放所有通过Handler发送的消息。每个线程中只有一个MessageQueue对象。Looper每个线程中的MessageQueue管家。调用Looper的loop()方法后,就会进入一个无限循环,然后每当发现Mess
2021-11-16 15:12:44
1958
原创 查看windows文件名的编码
dir > encode.txt然后用 sublime txt3 软件打开文件 encode.txt快捷键 Ctrl+` (此为1左边的‘~’键)然后输入view.encoding(),即会显示当前文档编码,即为 Windows 文件名。在 Windows10 家庭版上测试结果为:'UTF-16 LE with BOM'...
2021-11-07 22:07:41
3622
原创 管道与命令结合不生效的原因
以下命令将不会生效:find . -name "*.txt" | ls -l 原因:因为从管道接收的是数据流,不是参数。正确做法:find . -name "*.c" | xargs ls -l {}最后的{}可以不要。或:ls -l `find . -name "*.c"` 参考:https://www.coder.work/article/5128709...
2021-11-05 21:49:45
891
原创 linux正则表达式踩坑
假设一个文件file.txt,其内容如下:1323.23.24.11213.211.d12.3.4命令(加上引号):grep "[0-9]\.[0-9]" file.txt结果:2. 命令(不加引号):grep [0-9]\.[0-9] file.txt结果:解释:这是因为bash中\有特殊含义。正确的写法如下:grep [0-9]\\.[0-9] file.txt得到正确结果:...
2021-11-05 18:01:21
187
原创 算术移位 VS 逻辑移位
定义逻辑左移(LLS,Logical Left Shift):低位补零。逻辑右移(LRS,Logical Right Shift):高位补零。算术左移(ALS,Arithmetic Left Shift):低位补零。算术右移(ARS,Arithmetic Right Shift):高位补符号位。**注意:**以上4种定义,所有位(包括符号位)要同步移动。结论1. 不论正数还是负数,逻辑左移与算术左移完全相同。2. 正数:逻辑右移与算术右移完全相同。3. 负数:逻辑右移与算术右移不同。
2021-09-04 18:40:01
12543
6
原创 C++ const说明
C++ const说明直接上代码"顶层const"和"底层const"总结直接上代码#include <iostream>using namespace std;class A {public: int m1 = 1, m2 = 2;};int main() { A a, b; const A ca; const A * p1 = &a; // 被指向的对象不能改变 //p1->m1 = 10; // wrong,因为被指对象不能改变 p1 = &
2021-07-18 23:26:04
155
2
原创 Java多线程
Java多线程volatile作用新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入volatile作用保证线程可见性java堆内存是线程间共享的,除此之外各线程有自己的独享内存.线程读写共享的内存时,会有经历"复制
2021-07-18 16:59:51
132
原创 Android Makefile
命令call用于调用其它函数, 参数以逗号分隔,函数原型:$(call <expression>,<parm1>,<parm2>,<parm3>,…)当make执行这个函数时,<expression>参数中的变量,如$(1),$(2),$(3)等,会被参数<parm1>,<parm2>,<parm3>依次取代。Makefile函数调用形式:$(<function> <argume
2021-05-07 20:11:28
458
原创 换行“\n“与回车“\r“
换行"\n"与回车"\r"我们以Linux的`printf`命令来测试:分析:我们以Linux的printf命令来测试:$ printf "123\n"123$ printf "123\r\n"123$ printf "123"123$ ^C$ printf "123\r"$ printf "123\r\r\n"123分析:printf "123" 输出"123",没有换行。printf "123\n" 输出"123",再加上一个换行。printf "123\r" 没有输出!
2021-04-29 16:14:37
197
原创 Android HAL 接口定义语言
首先请阅读该文章:https://blog.youkuaiyun.com/qq_19923217/article/details/88398660下表列出了 Android 所有软件包前缀和位置:软件包前缀 位置 android.hardware.* hardware/interfaces/* android.frameworks.* frameworks/hardware/interfaces/* android.system.* system/hardware/...
2021-03-16 16:09:11
1773
原创 文件IO与进程
问题:1. 进程为什么会自动打开0, 1, 2三个文件描述符?答:shell进程启动时,会自动打开这三个文件描述符;shell利用fork()开启用户进程(子进程),该子进程复制父进程shell的所有文件描述符,并且共享文件表项;所以,子进程对文件状态标志(读、写、同步或非阻塞等)的修改,将会影响父进程。测试:void pr_fl(int fd); // 自定义函数:打印文件状态标志void set_fl(int fd, flags); // 自定义函数:设置文件状态标志in...
2020-07-30 22:30:12
403
原创 终端与shell
1. 在前台执行命令:$ ps -o pid,ppid,pgid,sid,tpgid,comm | cat PID PPID PGID SID TPGID COMMAND21818 21811 21818 21818 21827 bash21827 21818 21827 21818 21827 ps21828 21818 21827 21818 21827 cat从TGPID可以看出,bash不是终端进程,反而ps是终端进程。2. 在后台执行命令:$ ps .
2020-07-14 22:56:37
286
原创 C语言申请堆栈的限制
内存空间:32位程序:内存空间不得超过4G,其中4G是最大unsigned int表示的范围(2^32-1),见下图。64位程序:内存空间应该最大是(2^64-1)。这从malloc函数的声明可以看出:void* malloc (size_t size);其中:size_t在64位下为int64,在32位下为int32。栈空间:Linux:据说不能超过2MB,没有测试(`TODO`:待测试)。在linux下可以使用`ulimits`命令查看。Windows
2020-05-20 14:30:22
1100
原创 doxygen安装与使用
环境:Ubuntu 18.04安装:sudo apt-get install doxygen如果要使用图形工具,则sudo apt-get install doxywizardsudo apt-get install graphviz如果doxywizard使用时报错,cannot find dot,就是没有安装graphviz,可以在doxywizard的“Wiza...
2020-04-25 15:40:17
1129
原创 C++11: vector::push_back和vector::emplace_back的区别
vector::push_back()的输入参数是对象本身;vector::emplace_back()的输入参数是构造函数的参数,它可以根据这些参数自动构造一个对象。#include <iostream>#include <vector>using namespace std;class A{public: explicit A(int x):x_...
2020-04-25 12:20:40
691
原创 Unix学习笔记
第一章 基础知识1.2 UNIX体系结构由外到内:应用程序(shell、公共函数库)、系统调用、内核1.3 登录1.3.1 登录名口令文件/etc/passwd:口令文件中的登录项由7个以冒号分隔的字段组成,即:登录名:加密口令:数字用户ID:数字用户ID:注释字段:起始目录:shell程序root:x:0:0:root:/root:/bin/bashabc:x...
2019-11-17 15:54:29
220
原创 安装ubuntu和windows10双系统
一、先安装windows10:1.制作启动盘:在微软官网上,下载U盘制作工具,然后用该工具下载windows10,傻瓜式。2.开始安装:启动电脑,在Asus(华硕主板)徽标出现之后,立即不断按esc,选择从U盘启动:这里有两个U盘启动项,选择带"UEFI:Partition1"的,也就是用UEFI的方式安装win10。3.分区:全部删掉重建(这样会删除所有数据)。ssd上新...
2019-11-02 15:42:34
402
原创 git本地新建仓库并推送到远程
$ git init$ git add README.md$ git commit -m "first commit"$ git remote add origin https://github.com/bi-an/stl-source.git$ git push -u origin mastererror: src refspec master does not match any...
2019-08-31 16:59:31
1511
原创 Python作用域
Python有函数作用域:def fun(): x = 1print(x) # error: 找不到xPython没有块作用域:if True: x = 1print(x) # 打印1Python闭包:闭包closure类似于C++的class的简化版,没有private、public、protected这些作用域符,并且外界只能访问其方...
2019-08-20 16:54:21
177
原创 python 数据类型
Python数据类型 C++数据类型 list 列表 定义:list1 = ['physics', 'chemistry', 1997, 2000] 访问元素:list1[0]、list1[2:4] tuple 元组 + list 列表 dict 字典 定义:dict = {'a': 1, 'b': 2, 'b':...
2019-08-20 16:10:52
171
原创 Python的json函数
json.load读取文件(file),解析为json对象(dict类型);json.loads读取字符串(string),解析为json对象;json.dump写文件(file),将json对象写入文件;json.dumps写字符串,将json对象写成string。import jsonimport osjson_obj = { 'name':'Michael'...
2019-08-20 16:04:10
700
原创 QtCreator(qt5)在ubuntu下不能输入中文
1. 安装fcitx-frontend-qt5:sudo apt-get install fcitx-frontend-qt52. 这时候可以找到libfcitxplatforminputcontextplugin.so文件,我的路径是这里:/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplat...
2019-08-02 17:36:08
235
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人