1.java初始化过程:
1.初始化父类中的静态成员变量和静态代码块 ; 2.初始化子类中的静态成员变量和静态代码块 ; 3.初始化父类的普通成员变量和代码块,再执行父类的构造方法; 4.初始化子类的普通成员变量和代码块,再执行子类的构造方法;
2.instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例
3.linux的启动过程文件
/sbin/init在核心完整的加载后,开始运行系统的第一支程序,主要的功能就是准备软件运行的环境,包括系统的主机名称、网络配置、语系处理、文件系统格式及其他服务的启动等。
/bin/sh解释脚本的shell命令,开机后运行
/etc/sysvinit就是 system V 风格的 init 系统,顾名思义,它源于 System V 系列 UNIX。sysvinit 中运行模式描述了系统各种预订的运行模式。
/etc/inittab定义了系统引导时的运行级别, 进入或者切换到一个运行级别时做什么。
1,启动init进程的配置文件是/etc/inittab
2,/etc/sysvinit是系统初始化用的
4.linux重启命令
在linux命令中reboot是重新启动,shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的。
shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。 精确时间的格式是hh:mm,表示小时和分钟,时间段由+ 和分钟数表示。系统执行该命令后会自动进行数据同步的工作。 该命令的一般格式: shutdown [选项] [时间] [警告信息] 命令中各选项的含义为:
- k 并不真正关机而只是发出警告信息给所有用户
- r 关机后立即重新启动
- h 关机后不重新启动
- f 快速关机重启动时跳过fsck
- n 快速关机不经过init 程序
- c 取消一个已经运行的shutdown 需要特别说明的是该命令只能由超级用户使用。 例1,系统在十分钟后关机并且马上重新启动: # shutdown –r +10 例2,系统马上关机并且不重新启动:# shutdown –h now halt是最简单的关机命令,其实际上是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操作完成后就会停止内核。 halt命令的部分参数如下: [-f] 没有调用shutdown而强制关机或重启 [-i] 关机或重新启动之前,关掉所有的网络接口 [-p] 关机时调用poweroff,此选项为缺省选项
reboot的工作过程与halt类似,其作用是重新启动,而halt是关机。其参数也与halt类似。reboot命令重启动系统时是删除所有的进程,而不是平稳地终止它们。因此,使用reboot命令可以快速地关闭系统,但如果还有其它用户在该系统上工作时,就会引起数据的丢失。所以使用reboot命令的场合主要是在单用户模式。
init是所有进程的祖先,其进程号始终为1。init用于切换系统的运行级别,切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即重新启动
5.进程和进程控制块
进程是指一个具有一定独立功能的程序关于某个数据集合的一次运动活动。简单地说进程是可以并发执行的程序的执行过程,它是控制程序管理下的基本的多道程序单位。 进程控制块(PCB )是由系统为每个进程分别建立的,用以记录对应进程的程序和数据的存储情况,记录进程的动态信息。 PCB是一个进程存在的标志。系统根据PCB而感知进程的存在,根据PCB中的信息对进程实施控制管理,当进程结束时,系统回收对应的PCB,进程随之消亡。 进程控制块中包含一系列信息,其中进程名即进程标识符唯一标识对应进程,系统根据该标识符来识别一个进程。 一个进程只有唯一的进程控制块,不可和其他进程共用一个进程控制块。
6.编译基本概念
编译:进行语法检查、函数分配空间,将各个函数编译成二进制码,按照特定目标文件格式生成目标文件。 连接:把程序中各个文件编译生成的目标文件连接起来,同时还要同系统提供的资源(如函数库)连接成为一个整体,得到可执行文件。 运行:执行连接好的程序。 重定位:把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。
7.程序实现链接的方式有三种(链接时间不同):
1.静态链接 2.动态链接(装入时) 3.动态链接(运行时)
8.如果在一个建立了TCP连接的socket上调用recv函数
<0 出错 =0 连接关闭
0 接收到数据大小
9.有关http keep-alive
在HTTP1.0和HTTP1.1协议中都有对KeepAlive的支持。其中HTTP1.0需要在request中增加“Connection: keep-alive” header才能够支持,而HTTP1.1默认支持
当使用Keep-Alive模式时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接
可以在服务器端设置是否支持keep-alive server为多为静态内容时,开启keep-alive,增加传输效率。动态请求,已占用的资源得不到释放,效率低下。
10.硬链接和软链接
LINUX的硬链接不能链接到目录是因为引入了对目录的硬连接就有可能在目录中引入循环,在目录遍历的时候系统就会陷入无限循环当中,这样导致无法定位到访问目录。 硬链接:为原文件创建一个新的文件名,但本质中只增加了一个目录项,并使用与原来相等的inode,指向 原文件的区域。数据区为两个名字共享。 使用限制:源文件和链接文件必须在同一个文件系统内,且目录文件不能创建硬链接。 命令:ln a b // 给a创建链接文件b 可以使用ls -i查看两个inode是完全一样的。 同时注意连接计数count。count的意义对于文件来说是硬链接的个数,对于目录,一般(count-2)为目录包含的子文件个数。 注意:两者的权限也是完全一样的。对其中一个进行读写操作,另外一个也会更新。但删除其中一个,只会删除目录项,不会删除存储区数据。另外一个文件的使用和操作完全不受影响。除非count-1结果0,才将数据区删除。作用:节省空间,两个文件能同步更新,防止重要文件被“误删”。
软链接:也叫符号链接。本质是创建一个新的文件,保存源文件的路径名。因此inode和源文件的inode是不一样的。使用没有文件系统的限制,也没有文件和目录的限制。 命令:ln -s a b 注意:产生的文件权限和源文件是不一样的。由于软链接使用比较灵活,可能断链,也可以自循环,往往需要多次查找增加文件操作的步骤而降低效率。尽量少用,并避免出现循环。