1、有关多线程,多进程的描述错误的是
正确答案: D 你的答案: B (错误)
子进程获得父进程的数据空间,堆和栈的复制品
线程可以与同进程的其他线程共享数据,但是它拥有自己的栈空间且拥有独立的执行序列
线程执行开销小,但是不利于资源管理和保护
进程适合在SMP机器上进行,而线程则可以跨机器迁移
SMP:Symmetrical Multi-Processing,对称性多核处理器,多进程可以在不同的核上运行,但是线程不可以跨机器迁移,因为线程是存在于单一的进程之中,只能在一个核上运行
2、有一个二维数组A[10][5],每个数据元素占1个字节,且A[0][0]的存储地址是1000,则A[i][j]的地址是多少 ?
1000+5i+j
3、下列对MD5的叙述不正确的是:
正确答案: C 你的答案: D (错误)
是一种散列算法
指纹(摘要)的长度为128位
是一种对称加密算法
可用来校验数据的完整性
MD5 是摘要算法不是加密算法,两者的本质区别是:摘要算法是单向的,即明文可以通过摘要算法生成摘要结果,但反之则不能通过摘要结果还原成明文。而加密算法是双向的,即可以从明文通过加密算法生成密文,反之也可以通过解密算法将密文还原成明文。
所以,摘要算法主要用来检查明文是否发生过变动,而加密算法则用来传递不能让第三方知晓的内容。
4、下面关于并行和并发的区别,说法正确的是?
并发计算是一种程序计算的形式,在系统中,至少有两个以上的计算在同时运作,计算结果可能同时发生
并行计算指许多指令得以同时进行的计算模式。在同时进行的前提下,可以将计算的过程分解成小部份,之后以并发方式来加以解决
并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
并发的关键是你有处理多个任务的能力,不一定要同时。
并行的关键是你有同时处理多个任务的能力。
5、下面对于cookie的描述中正确的是?
Cookie的大小限制在4kb左右,对于复杂的存储需求来说是不够用的
如果在一台计算机中安装多个浏览器,每个浏览器都会以独立的空间存放cookie
由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题
cookie应该是由服务端发送到客户浏览器端并保存在浏览器端
6、若一进程有10个用户线程,则在系统调度执行时间上占用的时间片是()
1
由于用户线程不依赖于操作系统内核,因此,操作系统内核是不知道用户线程的存在的,用户线程是由用户来管理和调度的,用户利用线程库提供的API来创建、同步、调度和管理线程。所以,用户线程的调度在用户程序内部进行,通常采用非抢先式和更简单的规则,也无须用户态和核心态切换,所以速度很快。
由于操作系统不知道用户线程的存在,所以,操作系统把CPU的时间片分配给用户进程,再由用户进程的管理器将时间分配给用户线程。 那么,用户进程能得到的时间片即为所有用户线程共享。
7、多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为:
同步
-
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥
-
互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。
-
同步: 进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。
-
并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
-
多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。
-
异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。
异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。
8、给定n个节点的平衡二叉搜索树,每个节点的值是整数。给定一个整数,在树中找出与该整数最接近的节点的最小算法复杂度是()
Θ(logn)
平衡二叉搜索树时间复杂度是log(n),找寻相邻三个结点,就是3log(n)
9、在一个含有group by的查询sql中,同时存在having和where,sql在解析执行的时候,先执行的是哪一个?
where
执行顺序:from,where,group by,having,select,order by
10、0.6332 的数据类型是()
正确答案: B 你的答案: A (错误)
double
double是八个字节,float是四个字节,题目中有5个数字和1个标点应该占6个字节 且默认是double类型,如果是float,需要显式声明。
11、http 协议中,状态码的意思为
| 1** | 信息,服务器收到请求,需要请求者继续执行操作 |
|---|---|
| 2** | 成功,操作被成功接收并处理 |
| 3** | 重定向,需要进一步的操作以完成请求 |
| 4** | 客户端错误,请求包含语法错误或无法完成请求 |
| 5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
12、关于下列程序段的输出结果,说法正确的是
public class MyClass{
static int i;
public static void main(String argv[]){
System.out.println(i);
}
}
0
成员变量和局部变量的区别
1、成员变量是独立于方法外的变量,局部变量是类的方法中的变量
1)、成员变量:包括实例变量和类变量,用static修饰的是类变量,不用static修饰的是实例变量,所有类的成员变量可以通过this来引用。
2)、局部变量:包括形参,方法局部变量,代码块局部变量,存在于方法的参数列表和方法定义中以及代码块中。
2、成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static修饰;两者都可以定义成final型。
3、成员变量存储在堆,局部变量存储在栈。局部变量的作用域仅限于定义它的方法,在该方法的外部无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它。如果访问权限允许,还可以在类的外部使用成员变量。
4、局部变量的生存周期与方法的执行期相同。当方法执行到定义局部变量的语句时,局部变量被创建;执行到它所在的作用域的最后一条语句时,局部变量被销毁。类的成员变量,如果是实例成员变量,它和对象的生存期相同。而静态成员变量的生存期是整个程序运行期。
5、成员变量在累加载或实例被创建时,系统自动分配内存空间,并在分配空间后自动为成员变量指定初始化值,初始化值为默认值,基本类型的默认值为0,复合类型的默认值为null。(被final修饰且没有static的必须显式赋值),局部变量在定义后必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。\
6、局部变量可以和成员变量 同名,且在使用时,局部变量具有更高的优先级,直接使用同名访问,访问的是局部变量,如需要访问成员变量可以用this.变量名访问
本例中i为成员变量,有默认的初始值,如果定义在方法内部,就没有初始值
13、最坏情况下的时间复杂度最低的是
堆排序最坏的时间复杂度为O(nlog2n)
希尔排序最坏的时间复杂度为O(n1.5)
快排和冒泡最坏的时间复杂度为O(n2)
14、TCP的握手与分手,可能出现的情形有
握手需要3次通信
分手需要进行4次通信
FIN和ACK 在同一包里
ACK 和SYN 在同一包里
15、下面网络知识的阐述中,存在错误的是?
正确答案: A C 你的答案: A (错误)
ARP协议根据MAC地址查询其对应的IP地址,便于IP通信。
TCP协议是面向连接的,UDP协议时面向无连接的。
127.0.0.1属于私有地址。
IPV6协议是下一代IP协议。
A:arp是根据IP寻找MAC地址的协议
C:127.0.0.1是环回地址,而不是私有地址
环回地址是主机用于向自身发送通信的一个特殊地址。
环回地址为同一台设备上运行的 TCP/IP 应用程序和服务之间相互通信提供了一条捷径。同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开 TCP/IP 协议栈的下层。通过 ping 环回地址,还可以测试本地主机上的 TCP/IP 配置。
IPv4 的环回地址是保留地址之一 127.0.0.1。尽管只使用 127.0.0.1 这一个地址,但地址 127.0.0.0 到 127.255.255.255 均予以保留。此地址块中的任何地址都将环回到本地主机中。此地址块中的任何地址都绝不会出现在任何网络中。
私有地址有:
A类:10.0.0.0到10.255.255.255
B类:172.16.0.0到172.31.255.255
C类:192.168.0.0到192.168.255.255
16、堆栈溢出一般是由什么原因导致的
1、内存泄露,比如某一数组原先已定义好大小,但是在后续操作中存放的个数超出这一既定长度,会导致堆栈溢出
2、由于程序员动态申请的内存块使用后未立即释放,导致内存区不够用,也会导致堆栈溢出
3、程序陷入死循环,往内存写数据,不断地消耗内存空间
4、程序本身运行起来就要消耗一定大小的内存,但是系统提供的实际内存不够,比如JVM虚拟内存不够让程序使用
17、如何在命令行查看一台linux机器的CPU、SWAP分区信息、硬盘信息?
cat /proc/cpuinfo:查看一台linux机器的CPU信息
du:查看该目录占用文件系统数据块的情况
cat /proc/swaps:查看SWAP分区信息
df -lh:查看硬盘信息
18、String str = new String(“abc”),“abc”在内存中是怎么分配的?
堆
字符串常量区
什么是字符串常量池
JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池
工作原理
当代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用。
实现前提
字符串常量池实现的前提条件就是Java中String对象是不可变的,这样可以安全保证多个变量共享同一个对象。如果Java中的String对象可变的话,一个引用操作改变了对象的值,那么其他的变量也会受到影响,显然这样是不合理的。
关于堆和栈
Java中所有由类实例化的对象和数组都存放在堆内存中,无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。而栈内存用来存储局部变量和方法调用。
关于寄存器
Java中运行时数据区有一个程序寄存器(又称程序计数器),该寄存器为线程私有。Java中的程序计数器用来记录当前线程中正在执行的指令。如果当前正在执行的方法是本地方法,那么此刻程序计数器的值为undefined
关于本题目中,"abc"为字面量对象,其存储在堆内存中。而字符串常量池则存储的是字符串对象的一个引用。
19、下面哪些机制可以用于进程间通信?
正确答案: A B E 你的答案: A E (错误)
Socket
Named pipe
Shared memory
Linux进程间通信:管道、信号、消息队列、共享内存、信号量、套接字(socket)
Linux线程间通信:互斥量(mutex),信号量,条件变量
Windows进程间通信:管道、消息队列、共享内存、信号量 (semaphore) 、套接字(socket)
Windows线程间通信:互斥量(mutex),信号量(semaphore)、临界区(critical section)、事件(event)
20、SQL中的DDL、DML、DCL、TCL分别代表哪些操作
DDL data definition language(数据定义语言),主要的命令有alter、create、drop、truncate,ddl主要用在定义或者改变表的结构。
DML data manipulation language(数据操纵语言),主要的命令有select、update、delete、insert,dml主要用来操作数据库中的数据
DCL data control language(数据控制语言),主要的命令有grant、deny、revoke等,dcl主要用来设置或者更新数据库用户或者角色权限
TCL Transaction Control language,主要的作用是用来控制事务的,常用的关键字有commit、rollback、setpoint等
21、下面有关 java 类加载器,说法正确的是
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
tomcat 为每个 App 创建一个 Loader,里面保存着此 WebApp 的 ClassLoader。需要加载 WebApp 下的类时,就取出 ClassLoader 来使用
1)Bootstrap ClassLoader
负责加载$JAVA_HOME中jre/lib/rt.jar里所有的``class``,由C++实现,不是ClassLoader子类
2)Extension ClassLoader
负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
3)App ClassLoader
负责记载classpath中指定的jar包及目录中``class
4)Custom ClassLoader属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。
22、模糊查询通配符
1 、 LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden )。
2 、 LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer 、 Stringer )。
3 、 LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet 、 Green 、 McBadden )。
4 、 LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl 、 Sheryl )。
5 、 LIKE'[CK]ars[eo]n' 将搜索下列字符串: Carsen 、 Karsen 、 Carson 和 Karson (如 Carson )。
6 、 LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer )。
7 、 LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如 MacFeather )。