自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

转载 『阿男的技术分享』*Java Native Interface(下)*

『阿男的技术分享』*Java Native Interface(下)*接下来我们写一个HelloJNI.c来实现这个HelloJNI.h:#include <jni.h>#include <stdio.h>#include "HelloJNI.h"// Im...

2017-02-11 21:07:00 139

转载 『阿男的技术分享』*Java Native Interface(上)*

『阿男的技术分享』*Java Native Interface(上)*我们知道Java本身的实现,很大一部分是用C++写的。实际上,Java也允许我们和原生平台的代码进行交互。Java定义了一个接口规范,就叫做Java Native Interface,通过这个接口规范,我们就可以让Jav...

2017-02-11 21:06:00 107

转载 『阿男的Linux内核世界』*多核CPU是如何启动的?*

『阿男的Linux内核世界』*多核CPU是如何启动的?*大家有没有想过,多核CPU是如何启动的?BIOS代码由哪个核心执行?此外,Kernel从BIOS接管过来CPU的使用权以后,Kernel运行在哪个核心里面?这些问题大家都可以想一下,阿男给大家慢慢解答。首先是阿男一直推荐大家看的In...

2017-02-11 21:06:00 730

转载 『阿男的Linux内核世界』*Kernel的动态内存管理Slab Allocator*

『阿男的Linux内核世界』*Kernel的动态内存管理Slab Allocator*Linux Kernel有自己的动态内存管理机制,叫做Slab Allocator,它可以预先把计算机的实际内存空间给划分成固定大小的区块,然后把这些区块分配给请求内存的各个Process使用。我们可以通...

2017-02-11 21:04:00 177

转载 『阿男的工程世界』*让我们简单聊一下IO(4)*

『阿男的工程世界』*让我们简单聊一下IO(4)*最后,阿男给大家讲一下Memory Mapped IO,这个是完全由操作系统实现的一种设计。所谓Memory Mapped IO,就是在我们操作文件的时候,不是直接操作这个文件本身的数据,而是先把文件的数据拷贝到内存。Linux系统不叫copy...

2017-02-11 21:02:00 113

转载 『阿男的工程世界』*让我们简单聊一下IO(3)*

『阿男的工程世界』*让我们简单聊一下IO(3)*接下来阿男给大家讲一讲DMA,DMA全称Direct Memory Access,这个是做什么用的呢?早期的计算机设计下,硬件如果要使用内存里面的数据,CPU要负责这些内存的操作:把内存的数据传给硬件设备,把硬件设备的数据写入内存。这些操作要...

2017-02-11 21:01:00 88

转载 『阿男的工程世界』*让我们简单聊一下IO(2)*

『阿男的工程世界』*让我们简单聊一下IO(2)*我们来考虑一下不同设备之间速度不匹配的协调问题。首先,最快的设备应该是CPU本身这里,但是CPU也最忙,要协调处理周边设备。CPU内部的内存,就是寄存器,是可以和CPU本身匹配的内存设备。现代的CPU还配备L1 Cache,L2 Cache这些...

2017-02-11 21:00:00 107

转载 『阿男的工程世界』*让我们简单聊一下IO(01)*

『阿男的工程世界』*让我们简单聊一下IO(01)*在计算机的世界里,可能最复杂的不是计算,而是IO。为什么这么讲?因为IO意味着和外部世界打交道,这就需要理解和处理外部世界的复杂。CPU并不是纯计算单元,它要和内存打交道,要和各种外部设备打交道。这些外部的硬件,基本上没有在时钟频率,也就是...

2017-02-11 20:46:00 100

转载 『阿男教你玩Concurrent Programming』*学习的脉络(1)*

『阿男教你玩Concurrent Programming』*学习的脉络(1)*大家觉得并发编程学习起来很难,其实这块主要是知识体系比较庞大,设计比较多,理论学习比较漫长,找到一个学习的脉络,学习起来就不难。阿男这里给大家先梳理一下。首先我们要明白并发编程要解决什么问题。所谓并发,本质上就是...

2017-02-11 20:43:00 87

转载 『阿男教你玩转Concurrent Programming』*学习的脉络(2)*

『阿男教你玩转Concurrent Programming』*学习的脉络(2)*为了解决协调并发执行循序,协调资源的使用这两个问题,人类做了大量的研究,产生了很多的研究结果,制造了很多解决实际问题的工具。而我们要学习的就是这些东西了。为了协调并发执行顺序和协调资源的使用,我们需要协调的手段...

2017-02-11 20:35:00 96

转载 『阿男的Linux内核世界』*17 什么是硬件中断*

『阿男的Linux内核世界』*17 什么是硬件中断*这次我们讲讲硬件中断,硬件中断是CPU接受到的硬件发来的信号,比如我们使用键盘敲入一个字符,这个信号就是要发给CPU来处理。那么为了接受到这种信号,肯定是要在键盘和CPU之间有某种连接才可以。现在的键盘一般是通过USB接口连接的,USB接...

2017-01-18 03:24:00 125

转载 『阿男的编程本质论』*11 Eval,Macro,Preprocessor,Homoiconicity(四)*

『阿男的编程本质论』*11 Eval,Macro,Preprocessor,Homoiconicity(四)*最后我们说说Haskell。Haskell并不是Homoiconic的语言,而且Haskell也不需要Macro。为什么呢?因为Haskell有自己非常完善的类型系统的设计,而且Ha...

2017-01-17 11:32:00 108

转载 『阿男的编程本质论』*10 Eval,Macro,Preprocessor,Homoiconicity(三)*

『阿男的编程本质论』*10 Eval,Macro,Preprocessor,Homoiconicity(三)*那么Clojure这种macro和C语言里面#include这种macro有什么区别呢?C语言里面的macro实际上就是一种文本替换,比如#include "foo.h"在编译的时候...

2017-01-16 11:17:00 130

转载 『阿男的Linux内核世界』*16 从User Space到Kernel Space(四)*

『阿男的Linux内核世界』*16 从User Space到Kernel Space(四)*这次我们学习Linux的各种中断处理的入口,也就是entry。关于Linux的中断入口,Kernel代码自带的文档就写得非常好,位于Documentation/x86/entry_64.txt^1,大...

2017-01-14 00:30:00 121

转载 『阿男的编程本质论』*09 Eval,Macro,Preprocessor,Homoiconicity(二)*

『阿男的编程本质论』*09 Eval,Macro,Preprocessor,Homoiconicity(二)*我们这次来讨论Clojure的macro,我们看看这段Clojure代码:$ java -jar clojure-1.8.0.jarClojure 1.8.0user=>...

2017-01-12 23:40:00 102

转载 『阿男的Gradle学习笔记』 *02*使用Gradle编译Java项目

『阿男的Gradle学习笔记』 *02*使用Gradle编译Java项目Java代码目录结构默认遵循maven的规范:$ tree.├── build.gradle└── src └── main └── java └── org └── weli └─...

2017-01-12 19:29:00 104

转载 『阿男的Linux内核世界』*15 从User Space到Kernel Space(三)*

『阿男的Linux内核世界』*15 从User Space到Kernel Space(三)*我们目前知道了,当interrupt发生时,Kernel会暂时打断Process在User Space的运行,转到Kernel Space处理中断。此外,我们知道了interrupt大体可以分为三类,...

2017-01-12 06:49:00 129

转载 『阿男的Gradle学习笔记』*01*Gradle的安装与使用

『阿男的Gradle学习笔记』*01*Gradle的安装与使用Gradle的下载地址在这里^1。下载解压后,在.bash_profile中配置相关路径:# Gradleexport GRADLE_HOME=/Users/weli/projs/gradle-2.14export PAT...

2017-01-11 22:13:00 113

转载 『阿男的编程本质论』*08 Eval,Macro,Preprocessor,Homoiconicity(一)*

『阿男的编程本质论』*08 Eval,Macro,Preprocessor,Homoiconicity(一)*阿男这次想跟大家聊聊语言设计里面的几个概念,分别是Eval,Macro,Preprocessor和Homoiconicity。首先是Eval,我们在很多语言里都可以看到它的影子,比...

2017-01-11 11:23:00 112

转载 『阿男的Linux内核世界』*14 从User Space到Kernel Space(二)*

『阿男的Linux内核世界』*14 从User Space到Kernel Space(二)*我们知道了Intel架构的CPU的指令权限是按照Ring的级别来进行区分的:Kernel Space会使用Ring 0获得CPU的全部使用和管理权限,User Space使用Ring 3,获得计算机有...

2017-01-10 01:32:00 137

转载 『阿男的Linux内核世界』*13 从User Space到Kernel Space(一)*

『阿男的Linux内核世界』*13 从User Space到Kernel Space(一)*Linux操作系统在设计上分为两部分,分别是User Space和Kernel Space。我们在这篇文章里讲解一下,一个Process是如何在User Space与Kernel Space之间切换运...

2017-01-09 03:43:00 170

转载 『阿男的Linux内核世界』*12 Kernel Space和User Space*

『阿男的Linux内核世界』*12 Kernel Space和User Space*阿男在这篇文章里面给大家讲讲Linux的Kernel Space和User Space。我们知道,Linux操作系统和早期的Windows系统相比起来,最大的特色就是「基本上不会死机」。稍微年龄比较大的计算...

2017-01-06 04:13:00 181

转载 『阿男的技术日志』*02 处理Git项目当中既有Windows文件又有Linux/Unix/MacOS文件的问题*...

『阿男的技术日志』*02 处理Git项目当中既有Windows文件又有Linux/Unix/MacOS文件的问题*我们一般在处理git的line ending时,一般会把core.autocrlf设置为input模式:$ git config --global core.autocrlf...

2017-01-05 04:35:00 163

转载 『阿男的工程世界』*04 ldd,objdump与patchelf*

『阿男的工程世界』*04 ldd,objdump与patchelf*我们可以使用ldd命令来查看一个binary file(二进制可执行文件)的共享库,以httpd为例:[weli@fedora sbin]$ ldd httpd linux-vdso.so.1 (0x00007fffe3...

2017-01-05 04:33:00 341

转载 『阿男的Linux内核世界』*11 Process和Thread的设计*

『阿男的Linux内核世界』*11 Process和Thread的设计*阿男给大家在这篇文章里面讲解一下Linux针对Process和Thread的设计。我们在学习操作系统设计的时候,知道了Process是一种比较"重"的设计:每一个Process都拥有独立的内存空间,独立的生命周期;同时...

2017-01-04 14:40:00 266

转载 『阿男的编程本质论』*08 正则表达式是万能的吗?*

『阿男的编程本质论』*08 正则表达式是万能的吗?*我们在日常当中使用正则表达式搜索各种字符串,但是手里有这么厉害的一个工具,我们也必须知道它的局限所在。阿男之前开了个NFA和DFA的专题^1,共计10篇文章,主要是为大家介绍了正则表达式背后的有限状态自动机,也就是Finite Autom...

2017-01-04 05:18:00 164

转载 『阿男的工程世界』*03 POSIX AIO vs. Native AIO*

『阿男的工程世界』*03 POSIX AIO vs. Native AIO*POSIX AIO是标准的C语言库提供的一个异步式IO的框架。因为它是libc里面提供的,所以它是运行在USER SPACE里面。USER SPACE里面实现AIO可以有多种方式,而POSIX AIO是用pthrea...

2017-01-03 00:56:00 186

转载 『阿男的技术日志』*01 Bash的Here Document的使用方法*

『阿男的技术日志』*01 Bash的Here Document的使用方法*Bash支持<< 加上一个标记符号来进行多行输入stdin。比如下面这样的使用方法:$ sed 's/-/_/g' << EOF> 1-2> 3-4> EOF1_2...

2017-01-02 03:07:00 187

转载 『阿男的Haskell进阶学习笔记』*02 `type`关键字*

『阿男的Haskell进阶学习笔记』*02 type关键字*我们这次介绍两个关键字,分别是type和newtype。首先是type,这个关键字可以允许我们来把一种data type给做一下命名。比如我们常用的String,实际上就是[Char]的代名词,我们可以通过ghci的:i命令验证这...

2017-01-02 02:48:00 244

转载 『阿男的Haskell进阶学习笔记』*01 开篇*

『阿男的Haskell进阶学习笔记』*01 开篇*阿男之前在豆瓣上连载了Haskell的系列学习文章^1,介绍了一些Haskell的基础知识。接下来阿男想开一个新的专栏,继续深入介绍一下Haskell语言的方方面面,以及一些更高阶的Haskell方面的内容。这个专栏里面会更佳深入地讨论Has...

2017-01-02 02:28:00 148

转载 『阿男的Linux内核世界』*10 wait当中status参数的含义*

『阿男的Linux内核世界』*10 wait当中status参数的含义*我们在上篇文章里,学习了wait函数的使用方法,这篇文章里阿男带大家看一下wait函数里面status参数的具体含义。我们先复习一下wait函数的定义:pid_t wait(int *status);在C语言的世界...

2017-01-01 19:01:00 564

转载 『阿男的Linux内核世界』*09 wait的使用方法*

『阿男的Linux内核世界』*09 wait的使用方法*我们这篇文章里来写段代码使用wait函数:#include <sys/wait.h>#include <stdlib.h>#include <unistd.h>#include <std...

2017-01-01 18:47:00 92

空空如也

空空如也

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

TA关注的人

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