java&linux

 


  • linux的$符号:

    $# 是传递给脚本的参数个数;

    $0 是脚本本身的名字;

    $1 是传递给该shell脚本的第一个参数;

    $2 是传递给该shell脚本的第二个参数;

    $@ 是传递给脚本的所有参数的列表(是多个字符串,每个参数为1个字符串);

    $* 是传递给脚本的所有参数的列表(以一个单字符串显示所有参数),与位置变量不同,参数可超过9个;

    $$ 是运行脚本的当前进程ID号;

    $? 是显示执行上一条Shell命令的返回值,0表示没有错误,其他表示有错误


  • 测试:

   需求文档的测试,是在以下哪个阶段进行?     系统测试


  • java synchronized关键字

该关键字是一种同步锁,保证在同一时刻最多只有一个线程执行该段代码,它修饰的对象有以下几种: 
一、修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 
二、修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 
三、修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 

  • 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
  • 然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
  • 尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
  • eg.当两个线程访问同一个synchronized代码块时,同一时刻只会有一个线程能够访问synchronized代码块,执行该线程,而另一个线程则会阻塞,直到第一个线程执行完,释放该锁后,另一个线程才会执行。

四、修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。


  • linux的软连接和硬链接

  • 原理上

  • 硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。
  • 软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
  • 使用限制上:

  • 硬链接:
  1. 不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)
  2. 不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。
  3. 不能对不存在的文件创建硬链接,由原理即可知原因。
  • 软链接:
  1. 可以对目录创建软链接,遍历操作会忽略目录的软链接。
  2. 可以跨文件系统
  3. 可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了
  • 命令上:

  • 硬:ln 源文件 链接名
  • 软:ln -s 源文件 链接名

总结:

1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3.链接数目是不一样的,软链接的链接数目不会增加;
4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B。因为BBB共有3个字符

5.软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

当然软链接也有(硬链接没有的)缺点:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

https://www.cnblogs.com/ylan2009/p/4287929.html(参考链接)


  • 代码变到可执行文件

需要经过以下三个步骤:编译器、汇编器、链接器;源代码-->预处理-->编译-->优化-->汇编-->链接-->可执行文件

  • 编译器:读取源程序,进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,中间还进行优化等处理;公共子表达式合并、尾递归优化常量、不变式预计算

  • 汇编器:把汇编语言代码翻译成目标机器指令,关键是目标代码的分段处理;

  • 链接器:将有关的目标文件彼此相连接生成可加载、可执行的目标文件。

详见:http://www.cnblogs.com/oubo/archive/2011/12/06/2394631.html


  • 缓存区中的更新方式

LRU的cache长度为3,初始为空。依次访问元素A,A,B,C,A,D,C,E后,cache里的内容是:

缓存命中后,这个数据缓存项要移动到最前端,依次变化为A ;B,A; C,B,A; A,C,B; D,A,C; C,D,A; E,C,D


  • 从1 - 1001中,能被数字2或者数字3或者数字5整除的数字有

被2整除个数+被3整除个数+被5整除个数-被6整除-被15整除-被10整除+被30整除

被2整除的有:1001/2 =500个(取整)

被3整除的有:1001/3 = 333个(取整)

被5整除的有:1001/5 = 200个(取整)

被6整除的有:1001/6 = 166(取整)

被10整除的有: 1001/10 = 100(取整)

被15整除的有:1001/15 = 66(取整)

被30整除的有: 1001/30 = 33(取整)

所以总共有:500+333+200-166-100-66+33 =  734个


  • 错排问题

5个盒子每个里面各有一个球,把球全拿出来打乱再放回去,每个球都不在自己原来的盒子里,有 ?种可能

排除法。包括球在原来自己的盒子的可能一共是5的阶乘=120种。
1、有五个球都在自己的盒子里,1种。
2、有四个球在自己的盒子里,不存在,0种。
3、有三个球在自己的盒子里,只有两个对调了,5×4/2,10种。
4、有二个球在自己的盒子里,5×4/2×2,20种。
5、有一个球在自己的盒子里,5×(24-1-6-4×2),45种。(递归)
120-45-20-10-1=44种。


I/O系统硬件结构分为四级:1。设备控制器,2。I/O设备,3。处理机,4。I/O通道,按级别由高到低的顺序是

3412

处理机(CPU)控制设备(比如,打印机)进行某些操作。这样,处理机是最高层、实际的IO设备是最底层。设备控制器是紧贴在硬件IO设备之上,驱动IO设备正常运转。IO通道负责在处理机跟设备之间传输指令命令数据什么的。

通道是一个独立于 CPU的专管输入/输出控制的处理机,它控制设备与内存直接进行数据交换。所以通道是第二,通道控制设备控制器,设备控制器控制设备。


下列Linux命令中,哪些可以显示文本文件内容?

less tail cat


  • 虚拟内存

解放物理空间的存储管理, 使得数据被分配的地址与逻辑上程序执行的上下文解耦。

提供进程之间的地址空间隔离,防止进程访问地址越界或非法。

简化在链接阶段分配地址空间。

 


public class InterviewDemo {
    public static void main(String[] args) {
        Integer a = new Integer(8);
        Integer b = 8;
        int c = 8;
        System.out.println(a == b);
        System.out.println(b == c);
    }
} 

判断输出结果是:

false  true 

Integer b = 8; 自动调用Integer.valueOf(8) 返回一个Integer的对象。 这个对象存放到cache中的(上面一段代码分析)。 而 Integer a = new Integer(8);这里创建了一个新的对象Integer 所以 a == b 返回的是false

一个Integer 与 int比较,先将Integer转换成int类型,再做值比较,所以返回的是true。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值