CC BY 4.0 (除特别声明或转载文章外)
1、计算机原理
10进制转16进制计算方法:
注意:所有除法都要取整。
从右数第一位:1610%16 = 10
(表示16进制的A),结果:_ _ A
从右数第二位:1610/16 = 100
;100%16 = 4
,结果:_ 4 A
从右数第三位:100/16 = 6
;6%16 = 4
,结果:6 4 A
最后: 6/100 =0 结束运算,最后 转换结果 为:0x64A
进制与位元:因为 6个bit就能表示64,所以64进制的位元=6,同理 16进制位元=4,因为2^4=16。
计算机中原码、反码、补码:
正数的原码、反码、补码都等于原码。
负数的反码=除了最高位的符号位不变,其他位取反。
负数的补码=它的反码+1。可以看看这篇文章,讲解的比较通俗易懂。
负数在计算机中是以补码的形式存在,例如有这样一个二进制(
1111 1111
,其实就是-1),它的最高位是1,所以它是一个负数, 所以它应该是某个负数的反码形式,转换反码为1111 1110
(补码-1),转换为原码为1000 0001
(符号位不变,其他位取反),即1111 1111
表示-1,1000 0000
= -128的补码。关于补码的计算,在我之前的C primer笔记中有提到。
总线和寻址范围以及和内存的关系:
假设是32位的总线,那么cpu可以寻址的范围为2的32次方,这里的一根总线代表一个二进制的bit位,注意,这里的bit不是对应的内存bit。这个总线其实可以看成一个索引生成器,它可以给cpu生成2^32个索引。
内存的存储单位为byte,即一个字节 。假如内存是一盒奥利奥,那每一块奥利奥就是一个存储单位,它有8个bit,即一个字节。
通过总线产生的索引,去内存寻址。比如 cpu要寻址的地址 = 0x00000010,那么cpu就会去内存找到索引为 0x00000010 那个存储单元存储的值(一个字节)。
算术右移:在汇编中,可以用算术右移来进行有符号数据的除法。把一个数右移n位,相当于该数除以2的n次方。
比如,汇编语言中的: ASR R3,1 其意义相当于R3=R3/2
关于逻辑右移和算术右移的区别,可以参考我的C笔记 第15章。
2、操作系统
2-1、linux
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(也称软连接)(Symbolic Link)。默认情况下,ln命令产生硬链接。
ln -s a b
创建一个软连接(就像windows系统的快捷方式),即给a创建了一个快捷方式b。centos 6.0系统升级gcc:因为centos 6.0系统默认的gcc版本是很早的4.4.7,如果需要升级到更高的版本,需要自行下载源码,编译安装。
可以参考这个教程,里面有详细的步骤。另外,除了教程中出现的动态库问题,还需要注意gcc版本冲突的问题,因为自行编译安装的二进制,一般放在
/usr/local/bin
,而系统自带的放在/usr/bin
,所以可能存在两个版本的gcc。解决的办法:可以yum remove 删除老版本,也可以参考这篇教程,用软连接的方式解决。linux修改时间和时区:linux 修改时间 date。
- 将日期转换为Unix时间戳,参考:
date +%s #将当前时间以Unix时间戳 date -d '2013-2-22 22:14' +%s # 转换指定日期为Unix时间戳
- 将Unix时间戳转换为日期时间
date -d @1361542596 #不指定日期时间的格式 date -d @1361542596 +"%Y-%m-%d %H:%M:%S" #指定日期格式的转换
- 将日期转换为Unix时间戳,参考:
修改linux
date
命令的显示格式:编辑.bash_profile
文件, 添加下面一行alias date='date "+%Y-%m-%d %H:%M:%S"'
。语义化版本,教你如何定义软件的版本。
linux开启tcp bbr:Linux 升级内核开启 TCP BBR 实现高效单边加速。
alias grep='grep --color=auto'
,grep 高亮。alias = 'ls -lshF --color|sort'
,linux ls 按类型排列。alias rm='rm -i'
,rm删除前询问是否真正要删除(对root用户无效)。linux Epoll两种触发模式:LT水平触发(常用模式)、ET边缘触发。参考这个项目的examples(已star)。
linux挂载(mount 和 umount),这里主要记录linux挂载网络共享文件系统,例如:在linux挂载windows系统上的共享文件夹。
举例说明:
mount -t cifs //192.168.1.113/share /dir -o username=administrator,password=111111,rw,uid=500,gid=500,dir_mode=0777,file_mode=0777
-t cifs指定文件系统类型,-o 指定相关权限等。需要注意:mount挂载cifs需要先安装网络共享服务,
yum install -y cifs-utils
,windows系统需要开启445端口。挂载windows共享文件后的权限问题参考这里。开机自动挂载,其中一种方式:编辑
/etc/rc.d/rc.local
将上面的命令插入,重启即可。
umount卸载,如果出现device is busy报错,表示该文件系统正在被使用;使用命令fuser -mv /dir
查看此文件系统正在被哪些进程访问。Linux下用户组、文件权限详解,讲解干净利落,推荐。
ngrok 内网穿透,ngnix 反向代理。
假设:在路由器是先做一个内网穿透,开个隧道,穿透到80端口,再用ngnix做一个反向代理,代理内网某台电脑的8080端口,那这样是否可以做一个私有云呢?
正则表达式,参考这篇文章:正则表达式。
ss
命令显示linux系统socket状态。例如:ss -s
列出当前socket详细信息。centos开启zsh:centos开启zsh之旅。
centos 添加新用户并授权,参考。
adduser zhangbiao passwd zhangbiao vim /etc/sudoers ## 找到以下内容,并添加新用户 ## Allow root to run any commands anywher root ALL=(ALL) ALL zhangbiao ALL=(ALL) ALL #这个是新增的用户
CentOS更改yum源与更新系统,改为网易源镜像。
解决mysql报错[
can't create/write to file '/tmp/#sql_23e6_0MYI'
]:$mkdir /var/lib/mysql/tmp $chown mysql:mysql /var/lib/mysql/tmp $vim /etc/my.cnf $tmpdir = /var/lib/mysql/tmp $service mysqd restart
linuix禁止root用户开机登陆:修改
/etc/ssh/sshd_config
里面有一个配置选项PermitRootLogin no
,这样就可以不让root直接登录了。另外,设置AllowUsers允许指定用户通过ssh登陆,如AllowUsers domi
。centos6.x切换图形界面和命令行界面:修改
/etc/inittab
文件中的id:3:initdefault
,将3改为5则为图形界面 ,反之则为命令行界面,修改完后重新启动系统生效;centos6.x VMware虚拟机网络设置(桥接方式),参考VMware中让CentOS利用桥接上网的方法教程:
- 在 VMware 中打开【编辑】->【虚拟网络编辑器】,添加 VMnet0,并选择桥接模式。需要注意的是,需要选择“桥接到”的网卡,使用无线网卡就选无线网卡,使用有线网卡就选有线网卡
- 在虚拟机系统上右键,进入【设置】界面,在【硬件】选项卡中,找到【网络适配器】,设置为桥接模式
- 在虚拟机中编辑文件
/etc/sysconfig/network-scripts/ifcfg-eth0
,没有就创建一个 - 如果使用的是静态IP,则配置如下:
BOOTPROTO="static" HWADDR="00:0C:29:9D:5D:24" DEVICE="eth0" BOOTPROTO="static" HWADDR="00:0C:29:9D:5D:24" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="4f3f8c86-2041-40de-afbc-4a9056ad1d2e" IPADDR=192.168.22.172 #静态IP地址,与宿主机在同一网段内,不能被其他设备占用该IP NETMASK=255.255.254.0 #子网掩码,与宿主机一致 GATEWAY=192.168.23.254 #网关,与宿主机一致 DNS1=114.114.114.114 #如果是静态IP,需要在这里配置dns,在etc/resolv.conf的dns在重启网络后会丢失 DNS2=202.96.128.166
- 若使用 dhcp的方式获得IP,则配置如下:
DEVICE=eth0 HWADDR=00:0C:29:F4:F5:D6 TYPE=Ethernet UUID="4f3f8c86-2041-40de-afbc-4a9056ad1d2e" ONBOOT=yes #修改 NM_CONTROLLED=yes BOOTPROTO=dhcp #修改
- 输出命令
service network restart
,重启网络
#DEVICE是网卡编号,HWADDR是MAC地址,TYPE、UUID和NM_CONTROLLED这五项无需更改
#ONBOOT是设置在启动network服务时是否启用该网卡,需要将其改为ONBOOT=yes,否则以后每次都要使用ifup eth0启动网卡
#BOOTPROTO是设置获得IP方式,可选为staic(静态IP)、dhcp(动态分配)、none(不使用)
2-2、windows
链接器中三个最重要的动态链接库
kernel32.dll、user32.dll、gdi32.dll
的作用:kernel32.dll
是Windows9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。user32.dll
是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。gdi32.dll
是Windows GDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字。
TODO