JAVA面试题学习笔记(七)

  1. 进程是资源分配的基本单位;线程是系统调度的基本单位。
    线程共享的环境包括进程代码段、进程的公有数据(利用这些共享的数据,线程很容易实现相互之间的通信)、堆中的数据、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。线程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性这些个性包括:
    (1)线程ID
    每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。
    (2)寄存器组的值
    由于线程间是并发运行的,每个线程都有自己不同的运行环境,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便将来该线程重启时能得以恢复。
    (3)线程的栈
    栈是保证线程独立运行所必需的。线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以,线程必须拥有自己的函数栈,使得函数调用可以正常执行,不受其他线程的影响。
    (4)错误返回码
    由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用后设置了errno值,而在该线程还没有处理这个错误时,另外一个线程就在此时被调度器调度运行,这样错误值就有可能被修改。
    所以,不同的线程应该拥有自己的错误返回码变量。
    (5)线程的信号屏蔽码
    由于每个线程所感兴趣的信号不同,所以,线程的信号屏蔽码应该由线程自己管理。但所有的线程都共享同样的信号处理器。
    (6)线程的优先级
    由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级。
  2. 在Java语言中,浮点数默认为double,如果要给float型变量赋值,需要在浮点数后面加上f,例如float i=0.62f。
  3. 锁是网络数据库中的一个非常重要的概念,当多个用户同时对数据库并发操作时,会带来数据不一致的问题,所以,锁主要用于多用户环境下保证数据库完整性和一致性以商场的试衣间为例,每个试衣间都可供多个消费者使用,因此,可能出现多个消费者同时需要使用试衣间试衣服。为了避免冲突,试衣间装了锁,某一个试衣服的人在试衣间里把锁锁住了,其他顾客就不能再从外面打开了,只能等待里面的顾客试完衣服,从里面把锁打开外面的人才能进去。
    各种大型数据库所采用的锁的基本原理是一致的,但在具体实现上各有差别。在数据库中加锁时,除了可以对不同的资源加锁,还可以使用不同程度的加锁方式,即锁有多种模式共享锁、修改锁、独占锁、结构锁、意向锁及批量修改锁等。
    (1)共享锁
    共享锁也称为S(Share Lock)锁,用于所有的只读数据操作。共享锁是非独占的,允许多个并发事务读取其锁定的资源。
    (2)排他锁
    排他锁(Exclusive Lock)也叫写锁(X锁),表示对数据进行写操作。如果一个事务对对象加了排他锁,其他事务就不能再给它加任何锁了(某个顾客把试衣间从里面反锁了,其他顾客想要使用这个试衣间,就只有等待锁从里面给打开了)。排他锁具有以下几点性质:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
    (3)更新锁
    更新锁(也叫U锁)在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。因为当使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁,读取数据,然后将共享锁升级为排他锁,再执行修改操作。这样如果有两个或多个事务同时对一个事务申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为排他锁。这时,这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请更新锁,在数据修改的时候再升级为排他锁,就可以避免死锁。
    4.一个中缀式到其他式子的转换方法~~
    这里我给出一个中缀表达式~
    a+bc-(d+e)
    第一步:按照运算符的优先级对所有的运算单位加括号~
    式子变成拉:((a+(b
    c))-(d+e))
    第二步:转换前缀与后缀表达式
    前缀:把运算符号移动到对应的括号前面
    则变成拉:-( +(a (bc)) +(de))
    把括号去掉:-+abc+de 前缀式子出现

    后缀:把运算符号移动到对应的括号后面
    则变成拉:((a(bc)* )+ (de)+ )-
    把括号去掉:abc*+de± 后缀式子出现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值