培训部分
unix网络编程
socket本身是一个文件描述符
socket.h
int socket(int domain,int type,int protocol);
通常情况下protocol是0
domain AF_INET为网络,AF_UNIX为本地
AF_后端宏为PF_
SOCK_STREAM tcp
SOCK_DGREM udp
struct sockaddr_in addr
netinet/in.h
htons,inet_addr在arpa/inet.h中
addr.sin_family=AF_INET;
addr.port=htons(2222);
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
服务器端 需要bind (socket,&addr,sizeof(addr));
客户端:tcp需要connect udp可以直接sendto;
connect参数和bind一样
最后需要close
服务器端bind之后进行listen(socketfd, 233);
int len=sizeof(addr);
int accept(sockfd,(struct sockaddr*)&addr,&len);
!!accept的最后一个参数是一个指针!!用来传入传出
成功返回一个新的fd.用来本机稳定通讯
读写操作用新的fd进行操作
udp使用 sendto,recvfrom
sendto(sockfd,buf,sizeof(buf),0);第四个参数0为默认等待
如果不connect write无法发送.
read可以接收数据,但是不能包含发送方信息.
线程
pthread.h
编译时要包括 -pthread
pthread_t pid;
int pthread_create(&pid,pthread_attr_t* attr,void* (*f)(void*),void* p);
返回一个线程id,然后从f开始执行
第二个参数一般为0
pthread_join(pid,0);
等待一个进程结束,0为等待
线程最好以return 结束,或者pthread_exit(0);结束
exit(0);会连同进程一起推出
在create之后调用pthread_detach(pid)使线程分离,和主进程无关了
互斥量
pthread_mutex_t lock=THREAD_MUTEX_INITIALIZER;
或pthread_mutex_init(&lock,0);
pthread_mutex_lock(&lock) 加锁
pthread_mutex_unlock(&lock) 解锁
pthread_mutex_destroy(&lock)
对同一个上锁会等待,用pthread_mutex_trylock可以不等待
信号量
!不是信号量集
头文件semaphore.h
sem_t sem;
sem_init(&sem,0,5);
第二个参数是线程或进程,0为线程
第三个参数初始化计数器个数
sem_wait(&sem)
获取信号量 -1;
sem_post(&sem)
释放信号量 +1
destroy_sem(&sem)回收信号量资源
数据库
oracle字段类型
number
varchar2
date
任何值和null做运算都是null
nvl(e,1); 当e是null时返回1;
字符串用单引号,双引号中间可以有空格,且字符串形式完全一样
字符串拼接用||
单引号里面加两个个单引号用来输出一个单引号
%%表示%
dinstinct关键字放在select之后 用来去除重复,整句只能有一个
where条件判断
where a between 123 and 2
a在123到2之间
where a in(1,2,3);
a在1,2,3中
like '字符串' escape'\'
以\作为一个标示符,表明\后面的一个字符为实体
null 可以用 is和is not
排序
order by 排序字段 排序方式,排序字段2 排序方式2
默认ase这升序
desc 降序
永远在sql语句最后部分
当行函数
upper,lower,initcap首字母大写,length,
substr(e1,e2,e3) 字符串截取
e1 要处理的字串,e2从哪里开始截取-1代表最后一个字符位置,e3截取多少个字符
round(e1,e2)四舍五入
e2可以为负数,从小数点往前推
trunc(e1,e2) 截取数据
e2表示指定小数保留的位数
to_char(e1,e2)
e2为格式字符串,针对数字时 以fm开头
9 小数点前代表0-9,后代表1-9,
0 小数点前代表前导0,后面代表0-9
多表查询
自查询
给本表命名两个别名
from s_emp a,s_emp b;
组函数
count,sum
SQL>@脚本完整路径 导入sql
内连接,会损失一个表里没有匹配的内容
外连接,可以将没有匹配的内容页显示出来
只有oracle支持(+),加了(+)的表的对面表不损失,相当于本表加了null行
a left outer join b 左和右连接,都是右边的一个不损失
自学部分
移除性算法
remove
remove_if
remove_copy
remove_copy_if
unix网络编程
socket本身是一个文件描述符
socket.h
int socket(int domain,int type,int protocol);
通常情况下protocol是0
domain AF_INET为网络,AF_UNIX为本地
AF_后端宏为PF_
SOCK_STREAM tcp
SOCK_DGREM udp
struct sockaddr_in addr
netinet/in.h
htons,inet_addr在arpa/inet.h中
addr.sin_family=AF_INET;
addr.port=htons(2222);
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
服务器端 需要bind (socket,&addr,sizeof(addr));
客户端:tcp需要connect udp可以直接sendto;
connect参数和bind一样
最后需要close
服务器端bind之后进行listen(socketfd, 233);
int len=sizeof(addr);
int accept(sockfd,(struct sockaddr*)&addr,&len);
!!accept的最后一个参数是一个指针!!用来传入传出
成功返回一个新的fd.用来本机稳定通讯
读写操作用新的fd进行操作
udp使用 sendto,recvfrom
sendto(sockfd,buf,sizeof(buf),0);第四个参数0为默认等待
如果不connect write无法发送.
read可以接收数据,但是不能包含发送方信息.
线程
pthread.h
编译时要包括 -pthread
pthread_t pid;
int pthread_create(&pid,pthread_attr_t* attr,void* (*f)(void*),void* p);
返回一个线程id,然后从f开始执行
第二个参数一般为0
pthread_join(pid,0);
等待一个进程结束,0为等待
线程最好以return 结束,或者pthread_exit(0);结束
exit(0);会连同进程一起推出
在create之后调用pthread_detach(pid)使线程分离,和主进程无关了
互斥量
pthread_mutex_t lock=THREAD_MUTEX_INITIALIZER;
或pthread_mutex_init(&lock,0);
pthread_mutex_lock(&lock) 加锁
pthread_mutex_unlock(&lock) 解锁
pthread_mutex_destroy(&lock)
对同一个上锁会等待,用pthread_mutex_trylock可以不等待
信号量
!不是信号量集
头文件semaphore.h
sem_t sem;
sem_init(&sem,0,5);
第二个参数是线程或进程,0为线程
第三个参数初始化计数器个数
sem_wait(&sem)
获取信号量 -1;
sem_post(&sem)
释放信号量 +1
destroy_sem(&sem)回收信号量资源
数据库
oracle字段类型
number
varchar2
date
任何值和null做运算都是null
nvl(e,1); 当e是null时返回1;
字符串用单引号,双引号中间可以有空格,且字符串形式完全一样
字符串拼接用||
单引号里面加两个个单引号用来输出一个单引号
%%表示%
dinstinct关键字放在select之后 用来去除重复,整句只能有一个
where条件判断
where a between 123 and 2
a在123到2之间
where a in(1,2,3);
a在1,2,3中
like '字符串' escape'\'
以\作为一个标示符,表明\后面的一个字符为实体
null 可以用 is和is not
排序
order by 排序字段 排序方式,排序字段2 排序方式2
默认ase这升序
desc 降序
永远在sql语句最后部分
当行函数
upper,lower,initcap首字母大写,length,
substr(e1,e2,e3) 字符串截取
e1 要处理的字串,e2从哪里开始截取-1代表最后一个字符位置,e3截取多少个字符
round(e1,e2)四舍五入
e2可以为负数,从小数点往前推
trunc(e1,e2) 截取数据
e2表示指定小数保留的位数
to_char(e1,e2)
e2为格式字符串,针对数字时 以fm开头
9 小数点前代表0-9,后代表1-9,
0 小数点前代表前导0,后面代表0-9
多表查询
自查询
给本表命名两个别名
from s_emp a,s_emp b;
组函数
count,sum
SQL>@脚本完整路径 导入sql
内连接,会损失一个表里没有匹配的内容
外连接,可以将没有匹配的内容页显示出来
只有oracle支持(+),加了(+)的表的对面表不损失,相当于本表加了null行
a left outer join b 左和右连接,都是右边的一个不损失
自学部分
移除性算法
remove
remove_if
remove_copy
remove_copy_if