自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Joe's Blog

The Hungry Brain

  • 博客(106)
  • 资源 (5)
  • 收藏
  • 关注

原创 面试题

内核Linux中主要有哪几种内核同步方法?(原子操作,自旋锁(读写自旋锁),信号量(读写信号量),互斥体,完成变量,大内核锁,顺序锁,RCU,禁止抢占,顺序和屏障)vmalloc和kmalloc的区别?(vmalloc分配的内存虚拟地址是连续的,而物理地址则无须连续。用于申请较大的内存,虚拟内存是连续的。分配的内存在VMALLOC_START~VMALLOC_END之间。kmalloc...

2020-02-22 12:26:21 381

原创 设备驱动程序

设备驱动程序内核功能划分设备和模块分类Hello World模块功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式内核功能划分进程管理内存管理文件系统设备控制网络功能设备和模块分类字符设备块设备网络模块Hello World模块#include <linux/init.h>#include <linux/module.h>MO...

2019-07-06 23:11:42 1769

原创 Go 语言

Go 语言Go特性语言结构功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Go特性自动垃圾回收更丰富的内置类型...

2018-09-21 16:19:49 357

原创 python 高性能编程

全局解释器锁(GIL)对于Python来说,充分利用多核性能的阻碍主要在于Python的全局解释器锁(GIL)。GIL确保Python进程一次只能执行一条指令,无论当前有多少个核心,在任意时间点仅有一个核心在执行Python的指令。好在这个问题可以通过一些方法来避免,比如标准库的 multiprocessing,或 numexpr、Cython等技术,或分布式计算模型等。...

2018-07-31 14:53:21 588

原创 简单理解Docker

什么是DockerDocker使用Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离的进程,因此也称其为容器。Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极 大的简化了容器的创建和维护。使得 ...

2018-07-28 17:05:29 358

原创 快速熟悉mysql

术语数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 RDBMS即关系数据库管理系统(Relational Database Management System)数据库: 数据库是一些关联表的集合。数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。行:一行(=元组,或记录)...

2018-07-27 11:53:10 1267

原创 nothrow的介绍及使用

在C++中new在申请内存失败时默认会抛出一个std::bad_alloc 异常。所以,按照C++标准,如果想检查new是否成功,则应该通过try catch捕捉异常。但有些编译器不支持try catch。用户一般简单地使用”new(std::nothrow) 类型”。new在分配内存失败时会抛出异常,而”new(std::nothrow)”在分配内存失败时会返回一个空指针...

2018-07-13 09:50:56 7336

原创 基本原理

下面这5条基本原理,我认为是不言而喻的。它或者是能得到绝大多数人认可的一个理念,或者就是事实。目的原理:对企业来说,编写代码不是目的,只是手段,解决客户问题获得回报,才是目的;选择原理:如果可以选择,应该采用效益最高的一种手段来解决客户问题(所谓效益,指产出减去投入的差额);收益原理:代码是数字产品,具有零成本复制,可无限次重复使用的特点;成本原理:代码需要经历开发、测试、维护等环节,...

2018-06-22 16:55:24 254

原创 代码阅读

代码阅读怎么快速阅读代码,尤其是大中型系统的代码?大中型系统的代码往往比较复杂,逻辑之间的关系错综复杂,很多脉络隐藏在数据当中。 静态阅读代码,尤其是一些缺乏文档、注释的代码,很容易忽略一些不起眼的数据线索,无法理清程序逻辑。本文介绍的代码阅读方法,是结合动态调试和代码分析来探索系统运行逻辑的一种代码阅读方法。1. 先做整体了解首先,需要对系统做一个整体了解。了解系统提供的功能...

2018-06-22 16:44:45 223

原创 Sublime Text 2.x, 3.x license

http://appnee.com/sublime-text-3-universal-license-keys-collection-for-win-mac-linux/

2018-04-29 13:47:36 269

原创 HPACK(HTTP2 头部压缩算法)

简介压缩过程概述1 头部列表排序2 编解码上下文31 静态表32 动态表33 索引地址空间4 头部字段表示头部块解码1 头部块处理2 头部字段表示处理动态表管理1 计算表大小2 表大小的最大值3 动态表大小更改时的条目逐出4 在添加新条目时逐出原始类型表示1 整数表示2 字符串字面值表示二进制格式1 带索引的头部字段表示2 文字头部字段表示21 带增量索

2018-02-27 19:59:23 11898

原创 HTTP/2 协议规范

简介HTTP2 协议概述开始HTTP21 HTTP2 版本标识符2 http URIs21 HTTP2-Settings 头部域3 https URIs4 先前知识5 连接前言HTTP 帧1 帧格式2 帧大小3 头部压缩和解压缩流和复用1 流状态11 流标识符12 流的并发性2 流量控制21 流量控制原理22 流量控制的适当使用3 流的优先级31 流的依赖关

2018-02-24 15:22:04 28965 2

原创 如何有效阅读一本书?

阅读

2018-02-22 10:13:48 301

原创 TCP传输为什么会以这个1448作为打包单位呢?

以太网Ethernet最大的数据帧是1518字节。以太网帧的帧头14字节和帧尾CRC校验4字节(共占18字节),剩下承载上层协议的地方也就是Data域最大就只剩1500字节. 这个值我们就把它称之为MTU。MSS就是TCP数据包每次能够传输的最大量。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小

2018-02-09 15:09:42 1579

原创 SHA1算法

Secure Hash Algorithm1. 概述当输入的消息长度小于2^64 bits时,SHA-1输出160-bit的消息摘要。2. 定义a. A hex digit: 集合{0, 1, … , 9, A, … , F}中的一个元素 A hex digit 是4-bit字符串的描述。例如:7 = 0111b. A word 是 32-bit字符串(8 he

2018-01-31 10:43:06 824

原创 BLAKE2简介

关键词:哈希碰撞 Birthday attack blake2SHA-1存在严重的安全问题这一次破解的只是SHA-1的抗碰撞性。类似HMAC-SHA-1(使用HMAC伪随机函数和SHA-1共同作为哈希函数)或PBKDF2-HMAC-SHA1(使用HMAC-SHA-1作为伪随机函数的PBKDF2密码哈希)这样的哈希函数仍然是安全的。BLAKE2是安全的BLAKE2的定

2018-01-19 11:52:41 8625 1

原创 生成PKCS12证书,以及解析PKCS12证书

生成证书请查看: http://blog.csdn.net/u010129119/article/details/53419581生成PKCS12证书:openssl pkcs12 -export -chain -CAfile RootCA.pem -in server.pem -inkey serverkey.pem -out server.p12 -passout pass:123解析PKC

2017-12-19 15:49:45 29504

原创 python 3 笔记

一、python基础Ipython3 打印使用 print (var) #默认是换行的print (var, end = "" ) #不换行print (var1,var2,var3, sep='@') #插入分隔符原始字符串r"c:\user"在 python 中,类型属于对象,变量是没有类型的:a=[1,2,3]a="Runoob"保留字>>> impo

2017-12-10 22:50:48 629

原创 ROM、RAM、DRAM、SRAM和FLASH的区别

ROM和RAMROM和RAM指的都是半导体存储器, ROM是Read Only Memory的缩写, RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也

2017-12-08 14:11:53 432

原创 Git 清理无效的远程追踪分支

查看哪些分支需要清理:$ git remote prune origin --dry-run执行$ git remote prune origin删除无效的本地分支命令:$ git branch -d bug fix feature master4 master5 master6 origin/master7 mast

2017-11-17 16:45:49 375

原创 VS 2015 正确设置DLL路径的方法

2017-11-08 14:29:50 17728 8

原创 git 合并多个patch

生成patchgit diff commitID1 commitID2 > ./patch/合并patchgit am ./patch/*.patch合并多个commitgit rebase -i HEAD~n

2017-11-06 21:28:07 7729

原创 如何有效地学习开源项目代码?

方法一:1、从代码管理库下载完整的源代码。2、学习示例代码与单元测试。3、看架构文档。4、画流程图。方法二:clone某个项目的代码到本地查看这个项目的release列表找到一个看得懂的release版本,如1.0或者更早的版本读懂上一个版本的代码向后阅读大版本的源码

2017-09-28 09:55:20 1607

原创 UNP(卷2:进程间通信)—— 第15,16章:远程过程调用(门,Sun RPC)

(1)本地过程调用(local procedure call)(2)远程过程调用(remote procedure call,RPC):调用者为客户,被调用的过程为服务器。门(door)能力:一个进程调用同一台主机上另一个进程中的某个过程(函数)。(3)RPC通常允许一台主机上的某个客户调用另一台主机上的某个服务器过程,只要这两台主机以某种形式的网络连接着。

2017-09-23 11:36:53 459

原创 UNP(卷2:进程间通信)—— 第14章:System V共享内存区

先调用shmget,再调用shmat。对于每个共享内存区,内核维护如下信息结构 shmid_ds,/* Permission flag for shmget. */#define SHM_R 0400 /* or S_IRUGO from */#define SHM_W 0200 /* or S_IWUGO from *//

2017-09-23 09:34:27 285

原创 UNP(卷2:进程间通信)—— 第13章:Posix共享内存区

mmap提供父子进程间的共享内存区的列子:(1)使用内存映射文件;(2)使用4.4BSD 匿名内存映射;(3)使用 /dev/zero 匿名内存映射。POSIX 提供了两种在无亲缘关系进程间共享内存区的方法:(1)内存映射文件:由open函数打开,由mmap函数把得到的描述符映射 到当前进程地址空间中的一个文件。(2)共享内存区对象:由shm_open 打开一个Po

2017-09-13 11:46:54 283

原创 UNP(卷2:进程间通信)—— 第12章:共享内存区介绍

共享内存区是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不再涉及内核。然而往共享内存区存放信息或从中取走信息的进程间通常需要某种形式的同步。“不再涉及内核”:指 进程不再通过执行任何进入内核的系统调用来彼此传递数据。显然,内核必须建立允许各个进程共享该内存区的内存映射关系,然后一直管理该内存区。通常的客户服务器消息传递,需复制四次:

2017-09-12 21:30:31 333

原创 glibc源码解读——malloc

通过宏定义的展开,找到malloc的函数地址:# define C_SYMBOL_NAME(name) name# define ASM_LINE_SEP ;void *__libc_malloc (size_t bytes);libc_hidden_def (__libc_malloc)# define libc_hidden_def(name) hidden_def (nam

2017-09-11 20:15:27 2426

原创 UNP(卷2:进程间通信)—— 第11章:System V 信号量

先前介绍的POSIX信号量概念:二值信号量:0,1计数信号量:0和某个限制值之间的信号量。System V 中信号量:计数信号量集:一个或多个信号量,其中每个都是计数信号量。对于系统的每个信号量集,内核维护一个信息结构:中定义/* Data structure describing a set of semaphores. */struct semid_ds{

2017-09-07 17:58:32 340

原创 TLS重新协商显示扩展,RFC5746

1、介绍TLS [RFC5246]允许客户端或服务器启动重新协商 - 建立新的加密参数的新握手。 不幸的是,虽然使用由原始握手建立的加密参数来执行新的握手,但是两者之间没有加密绑定。 这将为攻击者创造机会,攻击者可以拦截客户端的传输层连接,将自己的流量作为前缀注入客户端与服务器的交互。 这种攻击的一种形式[Ray09]如下图所示:Client

2017-08-29 14:19:58 3821

原创 用于防止协议降级攻击的TLS备用信号加密套件值(SCSV),RFC7507

为了解决传统服务器的互操作性问题,许多TLS客户端实现不依赖于TLS协议版本协商机制,而是在初始握手尝试失败时有意使用降级协议重新连接。这样的客户端可能会退回到它们宣布版本低至TLS 1.0(或甚至其前身的安全套接层(SSL)3.0))的连接,作为最高支持版本。虽然这种后备重试可能是与实际遗留服务器连接的有用的最后手段,但主动攻击者可能会利用降级策略来削弱连接的加密安全性。此外,由于网络故障引

2017-08-29 10:52:24 2916

原创 Linux设备驱动:一,简介

内核 角色划分:进程管理:内核创建和销毁进程;调度器控制进程如何共享CPU。内存管理:内核为每一个进程都在有限的可用资源上建立一个虚拟地址空间。文件系统:结构化的文件系统。设备控制:设备驱动。网络:所有的路由和地址解析问题都在内核中实现。每个模块可以动态链接到运行中的内核中,通过 insmod 程序,以及 rmmod程序。3 类 驱动:字

2017-08-28 10:44:53 483

原创 git创建远程仓库

创建git远程仓库$ git init$ git add .$ git commit -a -m "prolin os 2.4"$ git remote add origin ssh://[email protected]/home/qiaojx/work/git/firmware/.git$ git push origin master

2017-08-21 15:20:04 279

原创 UNP(卷2:进程间通信)—— 第10章:Posix信号量

sem_open、sem_close、sem_unlink#include /* For O_* constants */#include /* For mode constants */#include sem_t *sem_open(const char *name, int oflag);sem_t *sem_open(const char

2017-08-16 17:40:00 354

原创 UNP(卷2:进程间通信)—— 第7、8、9章:互斥锁、条件变量、读写锁、记录上锁

互斥锁:相互排斥(mutual exclusion),用于保护临界区。Posix互斥锁被声明为具有pthread_mutex_t数据类型的变量。如果互斥锁的变量是静态分配的,那么我们可以把它初始化成常值PTHREAD_MUTEX_INITIALIZER。若是动态分配的,必须在运行之时,通过调用pthread_mutex_init函数来初始化它。#include int pt

2017-07-29 10:35:25 272

原创 UNP(卷2:进程间通信)—— 第6章:System V消息队列

System V 消息队列使用消息队列标识符(Message Queue Identifier)。具有足够特权的任何进程都可以往一个给定进程放置一个消息。也可以读出一个消息。跟Posix消息队列一样,在写消息之前,不求另外某个进程正在等待该队列上一个消息的到达。

2017-07-25 14:27:45 254

原创 UNP(卷2:进程间通信)—— 第5章:Posix消息队列

Posix消息队列 和 System V 消息队列的主要差别:对POSIX消息队列的读总是返回最高优先级的最早消息,对System V消息队列的读则可以返回任意指定优先级的消息。当往一个空队列放置一个消息时,Posix消息队列允许产生一个信号或启动一个线程,System V消息队列则不提供类似的机制。队列中的每个消息都具有如下属性:一个无符号整数优先级(Posix)

2017-07-21 14:54:16 352

原创 UNP(卷2:进程间通信)—— 第4章:管道和FIFO

管道由pipe创建,提供一个单向的数据流。#include int pipe(int fd[2]); // 返回:成功则为0,出错则为-1该函数返回两个文件描述符 fd[0] 和 fd[1] 。前者打开来读,后者打开来写。所有管道都是半双工的,即单向数据流。全双工管道某些系统提供全双工管道

2017-07-20 11:16:40 358

原创 LNK2005 __CRT_RTC_INIT already defined in LIBCMTD.lib(_init_.obj)

忽略重复定义:到 Project –> Linker –> Command Line 下输入:/FORCE:MULTIPLE

2017-07-19 18:48:22 1085

原创 libevent源码分析

libevent源代码文件组织结构:1)头文件:                 event.h                —— 事件宏定义、接口函数声明,主要结构体event的声明;2)内部头文件:          xxx-internal.h      —— 内部数据结构和函数,(对外不可见,信息隐藏);3)libevent框架:        event.c        

2017-07-18 10:19:21 270

深入Linux内核架构(中文版).7z

深入Linux内核架构是一本专业的Linux内核学习指导书,由德国资深Linux专家莫尔勒编著。本书结合了Linux内核版本2.6.24源代码中关键的部分,深入讨论Linux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等,并引导读者阅读内核源代码,熟悉Linux内在工作机理,充分展现Linux系统的魅力,欢迎下载阅读。

2019-07-15

TLS1.3规范

TLS1.3草拟规范,供提前研究

2017-06-15

Java书籍介绍

学习Java的道路上 非常好的书籍介绍 强化自己的技术

2013-08-02

有趣的数字游戏

最近Catcher对数字游戏很感兴趣,他发明了一种新的游戏,给出一个数N.问N是否能表示成某个正整数X的K次幂(K>1),N可能有多种表示方法,请找出最大的X并输出相应的K.例如 16=2^4=4^2,64=4^3=2^6=8^2则16应表示为4^2,64应表示为8^2

2013-04-07

C语言cingetline

学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;

2013-04-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除