LYP's Blog


  • 首页

  • 分类

  • 了解我

  • 归档

  • 标签

  • 简历

  • 看书

the evoltion of c++

发表于 2014-07-15   |   分类于 book   |  

为啥自己去读这本书?

  • 每每看到C++ 的特征,联想到C,我常常会踹多这门语言加入这个特征的原因,所以这本书给了我很多新的启发
  • 跟着大师的脚步,看语言的本质,其实语言就那么回事~
  • 我在学编译原理这门课,一门语言的诞生和发展,和编译器息息相关,这对我理解编译原理大有裨益
  • how to use C++ effectively~

C++ 虚函数

  • 每个类里有一个指针,指向虚函数表(表里的每项记录着,每个函数的入口地址,如果,派生类重写了基类的虚函数,那么,派生类的虚函数表,只会记录重写的函数的地址,没有被重写的函数,就记录基类的虚函数的地址)

override

  • 隐式转换对运算符重载的意义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class complex
{
double re,in;
public :
complex(double);
...
friend complex operator+(complex ,complex);
...
}
void g(complex z1,complex z2,double d)
{
complex z3 = z1+z2;
complex z4 = z1 + d;
complex z5 =- d + z1;
}

由于隐式转换的存在,运算符的混合运算的支持,就会方便很多
如果没有隐式转换的存在,假设定义四个基本算术运算,定义double 和 complex的完整运算集,要写12 个算术函数,但采用隐式转换只要4 + 1

  • explict 抑制隐式转换
  • 成员 or 友元
    - 运算符 = 必须是 成员
    - 最好把+= ,*= 一类的赋值运算符
    

continue ….

socket 理解

发表于 2014-06-07   |   分类于 网络编程   |  

tcp/ip 协议栈负责数据的封装,发送,接收,解封装,分发到应用程序
tcp/ip 协议栈是参照网络五层模型,根据RFC×××网络规范,实现的系统程序,提供网络服务

socket 的理解

端口的理解

为啥引入端口

在网络通信过程中,需要唯一识别通信两端的端点,就是使用端口识别运行于某主机中的应用程序。如果没有引入端口,则只能通过 进程号进行识别。进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前不知道自己的进程号,如果需要运行后再广播进程号则很难 保证通信的顺利进行。而引入端口后,就可以利用端口号识别应用程序,同时通过固定端口号来识别和使用公共服务,如HTTP和FTP等。

阅读全文 »

进程

发表于 2014-05-08   |   分类于 总结   |  

1. 进程、进程组、会话

进程(process)属于进程组(group),进程组属于会话(session)


2. 守护进程的创建

  • 父进程 fork() 产生子进程,父进程退出.这样做保证即将要成为会话组长的进程,调用setsid()能调用成功

  • 父进程先于子进程退出后,子进程,被init进程收养,调用setsid(),脱离init进程控制,成为会话组长,并与原来的登录会话和进程组脱离,同时脱离终端的控制。

  • 会话组长可以重新代开控制终端,那么可以使该进程再fork()一次,然后父进程退出,产生的子进程被init进程收养,最终,得到的进程,具备: 脱离终端控制,处在于一个新的会话组,并且不是会话组长

  • 关闭所有从父进程继承的不再需要的文件描述符

    1
    2
    3
    4
    for (int i = 0; i < NOFILE; ++ i)
    {
    close(i);
    }
  • 改变当前工作目录
    进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如/tmp,调用 chdir("/")

  • 重设文件创建掩模
    进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0)

  • 处理SIGCHLD信号
    处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。
    signal(SIGCHLD,SIG_IGN)


3. 孤儿进程 僵死进程

两句话可以概括:

  • 孤儿进程: 父进程先于子进程退出,那么,该子进程就会成为孤儿进程,被init进程收养
  • 僵死进程:子进程退出时,父进程没有调用wait()或waitpid()函数,子进程的空间得不到释放,操作系统无法回收物理空间,造成内存泄漏。

4. 进程优先级

调用nice()函数

数据库设计范式

发表于 2013-12-08   |   分类于 database   |  

三级范式

  • 1NF 的定义为:符合1NF的关系中的每个属性都不可再分

    1
    理解:一范式就是属性不可分割
  • 2NF 在 1NF的基础之上,消除了非主属性对于码的部分函数依赖

    • 函数依赖: 若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X

      • 完全依赖
      • 部分依赖
        • 传递依赖
    • 码(键)设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K,那么我们称 K 为候选码,简称为码

    • 非主属性

    • 部分函数依赖

1
理解:二范式就是要有主键,要求其他字段都依赖于主键
  • 第三范式(3NF)3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖
    1
    三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”

数据库的设计的改进

数据冗余过大,插入异常,修改异常,删除异常

1…34
罗宇平

罗宇平

keep thinking!

22 日志
13 分类
31 标签
GitHub
© 2015.7 - 2018 罗宇平
由 Hexo 强力驱动
主题 - NexT.Pisces