随笔
Wo_der
这个作者很懒,什么都没留下…
展开
-
什么是maven
maven是一种项目管理工具,maven项目与普通项目的不同是,项目中多了一个pom.xml的文件,用于告诉当前项目所需要的jar的位置,从而无须手动将需要用到的jar包引入...原创 2018-06-16 23:25:49 · 358 阅读 · 0 评论 -
gcc中的内联asm笔记(1)
uint16_t port;uint8_t value;...asm volatile ("outb %1, %0" : : "dN" (port), "a" (value) );写玩具内核的时候看到要读写端口,接触到了gcc的内联汇编,如上,解释一下outb %1, %0 表示把%1的内原创 2018-01-22 16:28:45 · 1570 阅读 · 1 评论 -
printf函数使用注意
一定要注意printf中的前面参数和后面类型是否对应,特别在输出字符串的时候,比如下面printf("%s",1);--------------------------------------core dumped直接就发生core dumped了,是因为把1当成地址去寻址想要访问对应存储的内容,但是发现没有访问权限越界了这个g++只是warning ,并不error的,有时候是会想尝试着写写,原创 2018-01-03 22:53:20 · 911 阅读 · 0 评论 -
无符号与有符号比较的时候会发生隐转
以前看过无符号和有符号比较的时候,有符号会转成无符号,今晚没注意sizeof的返回类型是size_t 是unsigned int,结果调了很久才发现这里long len =-1;char taq[248]; if(len > sizeof(taq)){ printf("aaaa\n"); }-------------------------------------原创 2018-01-03 22:27:38 · 328 阅读 · 0 评论 -
vim的c++运行环境的搭建
vim的配置基本学习资料不是非常了解vim的配置的可以参考下面资料: https://github.com/int32bit/use_vim_as_ide vim的安装vim的安装最好是上github或者官网下载安装, 直接使用apt-get等方式安装的有可能是阉割版导致不支持python等,会使得部分插件无法使用. 最新版vim 8.0的安装:从github获取vim git clone原创 2017-12-07 17:09:31 · 4173 阅读 · 0 评论 -
vim编辑器的配置
准备工作由于大多数vim插件都可以在github上找到,而且通过git安装、删除、升级插件都异常简单,因此我们需要首先安装git工具,如果不知道git和github,可以先自行GoogleCentOS安装sudo yum install gitUbuntu安装sudo apt-get install gitMac安装由于Mac没有像yum和apt-g转载 2017-11-28 10:31:49 · 310 阅读 · 0 评论 -
MIPS64寄存器与指令集
MIPS64指令集 需要注意的与32位的区别(32为的w:word ----- 64为的d: double):运算类:add变成dadd,同理sub/mul/div变成dsub/dmul/ddiv访存: lw变成ld, sw变成sd寄存器名: S0/S1… 全部变为r0/r1/… / r31 I/O映射表 在符号区域定义的符号的值是当前符号所原创 2017-09-20 20:31:38 · 13803 阅读 · 0 评论 -
linux系统编程手册阅读笔记-c20:信号的基本概念
chapeter 20 :信号的基本概念内核信号机制实现http://www.spongeliu.com/165.html 当进程P2向p1发送信号后,内核接受到信号,并将其放在p1的信号队列中,当p1再次陷入内核态时,会检查信号队列,并根据相应的信号调取相应的信号处理函数。 - p1什么时候会陷入内核态?当前进程由于系统调用、中断或异常而进入系统空间,到返回用户空间的前夕。 当前进程在内核中原创 2017-09-20 17:03:27 · 438 阅读 · 0 评论 -
一个简单的socket监听的服务器实例
#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<signal.h>#include<unistd.h>#include<stdlib.h>#include<assert.h>#include<stdio.h>#include<string.h>#include<stdbool.h>原创 2017-09-26 16:29:46 · 3998 阅读 · 0 评论 -
void ( *p ) (void) 和 void ( *p () ) (void)的区别
今天看信号的时候遇到一个很奇怪的函数原型 void ( signal(int sig, void ( handler)(int))) (int); 这是一个函数,其中参数为int sig,void(*handler)(int) 返回类型为一个指向 void (int)类型函数的指针对于void ( *p ) (void) 和 void ( *p () ) (void) void ( *p原创 2017-09-18 12:01:20 · 2580 阅读 · 0 评论 -
头文件只能放变量的声明但是不能放定义
一般的做法都是在头文件(.h)中声明变量,然后在源文件(.c)中定义变量如果在头文件中定义变量,这个变量就有了实体,如果a.c和b.c一起引用了头文件head.h,就等于同时创建了两个同样名字的变量实体,在一个工程下,链接的时候就会导致重定义的问题如何在头文件中声明变量而不是定义呢 ?使用extern关键字,extern关键字表示当前变量在别处定义,需要链接到外面的文件才能找到具体的变量,原创 2018-01-22 17:24:14 · 2848 阅读 · 1 评论 -
模拟信号和数字信号的区别
作者:杨眀链接:https://www.zhihu.com/question/38377832/answer/118464689来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。题主说的模拟信号是相对数字信号而言的吧? 如果是的话,那它就是指连续的意思。举个例子帮助你理解模拟和数字的区别:常见的仪表显示有指针式和数字式,指针式仪表,可以转载 2018-01-22 17:30:48 · 26318 阅读 · 0 评论 -
于渊<orange's 一个操作系统的实现>中文件系统的bug
其实这不属于文件系统的bug,这应该属于进程的bu,不知道有没有跑过第九章文件系统的最后代码的,是一个和linux下文件系统调用一样的范例。一开始感觉TestB()和TestC()这两个进程没用,这两个实际进程没做什么,就是Print一下,然后就死循环了,然后就删掉了,只留下了个进程TestA(),然后问题就出现了总是报异常,但是另外两个进程加上去之后就没事了,很不解。后来发现,文件系统也是由一个系原创 2018-04-01 21:38:51 · 930 阅读 · 8 评论 -
于渊《orange's 一个操作系统实现》的字符串输出函数disp_str有bug会导致异常
于渊先生的《orange’s 一个操作系统实现》的字符串输出函数disp_str有bug会导致异常发现在同一个函数中两次使用disp_str就会导致异常,这个问题困扰了我很久,一般来说都是堆栈的没有恢复好的问题,在反复的检查后发现堆栈并没有什么问题,disp_str是一个汇编程序,莫名觉得是符号问题,鬼使神差的使用c程序对其包装发现没有这样的问题,一直往堆栈方向想,但后来想到自己大一写汇编函数...原创 2018-03-26 17:12:51 · 1641 阅读 · 9 评论 -
汇编中标量和变量的区别
今天看汇编的时候遇到的一个说法 对于一个变量来说num dw 2mov bx num ;mov cx [num]; bx == cx ==2上面两种写法居然是一样的,这有点让我讶异,我一直以为汇编中无论是变量还是标号,应该是一个地址才对,不加中括号的时候是地址,加了中括号之后就是地址对应的值,但是实际上这个想法居然是错的?! 就看过网上的一个版本是这么陈述的:1,对于mov指令来说:有没原创 2018-02-08 16:51:48 · 628 阅读 · 0 评论 -
马斯克的第一性原理是什么?
spacex跨时代的此次发射回收推进节成功之后,mask又火了一把,铺天盖地的关于mask的报道,其中犹甚提到了mask非常尊崇的“第一性原理”,从知乎了解之后大概如下:比如预测某种大自然的力学活动时,需要通过建立理论模型去求解问题,但很多时候模型的细节太多太过于复杂没有办法完全表示的时候可以使用一些先验的假设去完善这种模型,然后在这种假设下计算的得出结论,也被称之为预测而相对于另一种,不原创 2018-02-11 12:44:07 · 4787 阅读 · 0 评论 -
intel汇编学习笔记 loop和test
loopxor eax, eaxmov ecx, 1024 .begin:add eax, 1loop .begin ; if( --ecx > 0 ) goto .begin:如c版本注释所示,当–ecx > 0时会跳转到.begintesttest eax,eax ;if(( eax & eax ) == 0 )jz label原创 2018-01-29 22:54:40 · 1117 阅读 · 0 评论 -
ubuntu下包装drcom拨号
学校使用drcom拨号上网的,但有时候下载的版本很奇怪会占用终端,于是写个程序重新包装一下#include#include#includeconst char app[]="/home/woder/download/DrClient/DrClientLinux";//应用名const char dir[]="/home/woder/download/DrClient";//应用目录原创 2018-01-24 18:24:32 · 260 阅读 · 0 评论 -
c++ 使用boost去读写json
这两天刚好写一个小玩具需要用到读写配置文件,趁机学习了c++的boost 读写库{"SERVER_REG":"/tmp/wangyishen_register","SERVER_LOG":"/tmp/wangyishen_login","SERVER_CHAT":"/tmp/wangyishen_sendmsg","MAX_CONNECT_NUM":"2"}对于上面一个位于/etc/erv原创 2018-01-05 11:20:06 · 4079 阅读 · 0 评论 -
c语言源文件为什么要引入同名头文件
在编译器眼中其实.c文件和.h文件并没有什么本事的区别,都是同样的文件,并不是说编译头文件的时候就会去找同名头文件,.h文件的内容会被完全替换源文件中的include "xxx.h",然后编译成.s 汇编文件,最后在链接的时候才和外部的符号进行链接。为什么多了一个.h的文件大概是为了方便区分。那为什么常见自己写的源文件中会看到所写的include "xx.h",引入同名头文件呢,这句话并不原创 2018-01-22 18:12:39 · 5658 阅读 · 1 评论 -
c++的头文件的一些问题
头文件的写法source2.h-------------------------------------#ifndef#define SOURCE_2_H_extern int a; #endif-------------------------------------source2.cpp-------------------------------------#include"原创 2017-08-30 22:32:23 · 351 阅读 · 0 评论 -
c++primer plus阅读笔记(一)
unsigned比signed更高级int a=-1;undigned int b=0;cout<<a+b<<endl-----------------------4294967295强转的三种方法(typeName) value // ctypeName (value) // c++static_cast<typeName> value //更加严格的强转auto关键字自动确定类型au原创 2017-09-15 10:48:36 · 218 阅读 · 0 评论 -
指针和数组名
想要清楚的知道指针和数组的本质区别还有处理方式,感觉绕不开看编译器是如何处理的了,有时间可以上知乎搜搜有什么编译类的书籍,或者找个懂编译的大神,在网上看到有一篇从编译器角度剖析数组名的,有所帮助,虽然没有说到足够深入让我理解指针和数组真正的本质是什么: http://blog.chinaunix.net/uid-27004869-id-3301282.html本文只是稍微说明一下自己的猜测和理解,原创 2017-09-14 17:33:59 · 361 阅读 · 1 评论 -
指针数组与数组指针,指针常量与常量指针
对于上面的东西,我在这博大的中华文化中绕了好久才绕出来,深怕又绕进去了,害怕的我马上写点东西记下来 我仍旧是会区别不出来指针常量和常量指针,但是从代码上我可以认出他们,这就够了int *p[]; //指针数组,指针型数组,是一个数组,类型为*int (*p)[]; //数组指针,数组型的指针,是一个指针,指向一个int []数组从名字上来看,可以知道哪个在后面就可以确定是数组原创 2017-09-08 16:38:46 · 2811 阅读 · 3 评论 -
大端数与小端数
大端数(big-endian)和小端数(little-endian)这两个中文会让人绕晕,从英文上是比较好理解的首先从内存单元上来看 排列顺序是这样的,也就是从下往上增长,从右往左增长,当一个指针指向一个int型(四内存单元)的变量时,指针的地址是地址最低的内存单元 big-endian:大的部分(数的高位)在存储单元的尾部 little-endian:小的部分(数的低位)在存储单元的尾部 最原创 2017-09-14 16:39:07 · 1616 阅读 · 0 评论 -
数据库连接池的原理
数据库连接池的原理 帅宏军 这次我们采取转载 2017-08-28 15:29:09 · 216 阅读 · 0 评论 -
unicode 和utf-8的区别
转自知乎:https://www.zhihu.com/question/23374078=============很久以前保存的,别人写的但是很明了=============很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多原创 2017-08-22 16:38:24 · 242 阅读 · 0 评论 -
git常用命令
git常用命令将文件放在缓存中git add file查看当前git的文件状态git status -s查看文件与缓冲文件的区别git diff查看不同版本缓冲文件的区别git diff --cached查看缓冲文件与提交文件的区别git diff --Head回滚,取消一个已提交的缓存git reset head --hello.rb删除,将缓存区中文件删除git rm default 删除磁原创 2017-08-03 11:22:28 · 326 阅读 · 2 评论 -
numpy Array [: ,] 的取值方法
numpy Array [: ,] 的取值方法NumPy数组是一个多维数组对象,称为ndarray创建一个numpy数组,如下所示import numpy as npx=np.array([[1,2,3],[4,5,6],[7,8,9]])使用的方法和python中的元表差不多print(x[0:2])>>>[[1 2 3] [4 5 6]]print(x[:])>>>[[1 2 3]原创 2017-07-30 22:19:08 · 51897 阅读 · 5 评论 -
Git版本控制详解
注意:原文地址:http://www.ihref.com/read-16369.html学习前请先配置好Git客户端相关文章:Git客户端图文详解如何安装配置GitHub操作流程攻略官方中文手册:http://git-scm.com/book/zhGIT 学习手册简介本站为 git 学习参考手册。目的是为学习与记忆 Git 使用中最重要、最普遍的命令提供快速翻阅。 这些命令以你可能需要的操作转载 2017-07-15 21:56:15 · 441 阅读 · 0 评论 -
c++primer plus阅读笔记(二)
内联函数内联函数与普通函数不同的是,内联函数直接将原函数拷贝到调用出,从而无须跳转,加快程序的运行速度缺点是每一个调用处都需要有内联函数的拷贝,内存开销增大在声明或定义前加上inline即可inline void fn(a);引用引用在声明的时候必须要初始化,更像const指针,一旦与某个变量关联起来就不可改(2) 可以有const指针,但是没有const引用;(3) 指针可以有多级,但是引用只能原创 2017-09-15 10:50:05 · 260 阅读 · 0 评论 -
c++primer plus阅读笔记(四)
作用域枚举普通枚举enum egg{small.medium,large,jumbo};enum t_shirt{small,medium,large,xlarge};//small所属同一个{}作用域内,会导致出现错误--------------------------------------------//作用域枚举enum class egg{small.medium,large原创 2017-09-15 10:51:44 · 241 阅读 · 0 评论 -
c++ primer plus阅读笔记(三)
头文件的写法source2.h-------------------------------------#ifndef#define SOURCE_2_H_extern int a; #endif-------------------------------------source2.cpp-------------------------------------#include"原创 2017-09-15 10:50:54 · 405 阅读 · 0 评论 -
有了进程还引入线程的本质原因
linux中,线程是以轻量级进程实现的,在内核看来,线程就是进程没有区别,为什么还引入线程呢? 1.节省空间,对于进程a正在执行的任务1阻塞了,这个想要使用另一个进程b去完成进程a的任务2的效果(如果需要的话并将结果传回给进程a),那么进程b就要对进程a的很大一部分资源(代码,数据)都要进行一部分拷贝,这就造成了在这些数据在内存中的重复,浪费了空间。而线程的引入解决了空间上的开销,linux中原创 2017-09-24 16:41:28 · 3293 阅读 · 2 评论 -
tcp三次握手,四次挥手的原因
根本原因网络传输会丢包,需要ack包去保证传到了,而ack包依靠tcp重传机制的附带特性不需要第二个ack包去确认ack到达。三次握手正常的tcp连接如上图所示(1)客户端希望与服务端建立连接请求 (2)服务端告诉客户端同意建立连接请求 (3)客户端告诉服务端,收到了服务端的同意的信息 三个步骤存在的原因步骤(1)缺失了,客户端连申请都不发送,服务端怎么知道你要连接 步骤(2)缺失了,原创 2017-09-24 16:02:02 · 749 阅读 · 0 评论 -
c++primer plus阅读笔记(十)
自增的先后operator ++ (int) ;a++operator ++ (); ++ac++左值与右值右值是一般都是临时对象,可能存在寄存器或可能被编码到机器指令的【立即数】中,所以右值无法使用【’&’】取地址。 int a;a=++a; //a是左值,而++a是operator++()返回的左值引用和右值引用int &;//为左值引用int &&;//为右值引用非const右原创 2017-09-15 11:19:55 · 264 阅读 · 0 评论 -
c++primer plus阅读笔记(九)
权限与构造函数构造函数与析构函数与成员中的方法一样是具有权限的,而且调用者就是使用者的那段代码域如果把构造函数设置成私有的话,那只有友元或友类才能创建。同理,析构函数不一定要求是public的,如果析构函数是private,那除了友元和友元类之外,只能使用堆的方式建立对象class a{private: ~a(){ ... }};main{ a Tem原创 2017-09-15 11:19:12 · 196 阅读 · 0 评论 -
c++primer plus阅读笔记(八)
友元类1.友元类的声明class Tv{ friend class Remote;//友元类就代表这肯定是一个类,无须前向声明Remote。};class Remote{ ...};2.友元成员函数不想使用友类所有函数都变成友元,可以使用友元成员函数。!!编译器本身的符号解析和编译时按顺序来的,导致友元成员写起来要注意顺序。class a ; //a要前向声明原创 2017-09-15 11:18:28 · 271 阅读 · 0 评论 -
c++primer plus阅读笔记(七)
继承权限继承后,基类的私有,保护,公开成员的属性是对派生类的,继承之后的属性在派生类与原有的属性一样,但是超过继承方式的会被统一压在继承方式下。class time{private: .. protected: ..public: ..};class time2:protected time{};Time2以保护的方式继承之后,time的public成员统一变成了原创 2017-09-15 11:17:22 · 83 阅读 · 0 评论 -
c++primer plus阅读笔记(六)
c++自动提供的成员函数默认构造函数,如果没有定义构造函数默认析构函数,如果没有定义拷贝构造函数。如果没有定义赋值运算符,如果没有定义地址运算符,如果没有定义。什么时候调用拷贝构造函数Time time_ob_2(time_ob_1);Time time_ob_2 = time_ob_1;Time time_ob_2 = Time(time_ob_1);Time *time_ob_2原创 2017-09-15 11:16:15 · 226 阅读 · 0 评论