2018.7.13 企业面试题练习训练

智力题

【10】某城市发生了一起汽车撞人逃跑事件,该城市只有两种颜色的车,蓝色15% 绿色85%,事发时有一个人在现场看见了,他指证是蓝车,但是根据专家在现场分析,当时那种条件能看正确的可能性是80%那么,肇事的车是蓝车的概率到底是多少?

【11】有一人有240公斤水,他想运往干旱地区赚钱。他每次最多携带60公斤,并且每前进一公里须耗水1公斤(均匀耗水)。假设水的价格在出发地为0,以后,与运输路程成正比,(即在10公里处为10元/公斤,在20公里处为20元/公斤......),又假设他必须安全返回,请问,他最多可赚多少钱?

【12】现在共有100匹马跟100块石头,马分3种,大型马;中型马跟小型马。其中一匹大马一次可以驮3块石头,中型马可以驮2块,而小型马2头可以驮一块石头。问需要多少匹大马,中型马跟小型马?(问题的关键是刚好必须是用完100匹马)

不定项选择题

1.设有一个关系EMP(职工号,姓名,部门名,工种,工资),若需查询不同部门中担任“钳工”的职工的平均工资,则相应的查询语句为:

SELECT 部门名,AVG(工资) AS 平均工资
FROM EMP
GROUP BY ( 1 )   A
HAVING ( 2 )   A
将职工号为“23115”、姓名为“李军”、部门名为“硬件测试部”的元组插入EMP关系中的SQL语句为:
INSERT ( 3 )   A
(1)A: 部门名			B: 姓名		C: 职工号		D: 工种
(2)A:工种=‘钳工’	   B: ‘工种=钳工’		C: ‘工种’=钳工		D: 工种=钳工
(3)
	A: into EMP values(‘23115’,‘李军’,‘硬件测试部’,,)
	B: set to EMP values(‘23115’,‘李军’,‘硬件测试部’,,)
	C: into EMP values(23115,李军,硬件测试部,,)
	D: set to EMP values(23115,李军,硬件测试部,,)

2.某二叉树的先序遍历序列为ABFCDE,中序遍历序列为BFADCE,则该二叉树根的左孩子和右孩子结点分别是( D )

A: B和C			B: F和B			C: B和F			D: C和B

3.在了解程序内部结构和流程后,通常采用( A )验证程序内部逻辑是否满足设计需求,此时可使用( A )技术设计测试案例

(1)A: 白盒测试		B: 黑盒测试		C: 等价类划分		D: 边界值分析
(2)A: 逻辑覆盖		B: 边界值分析		C: 因果图			D: 等价类划分
函数调用时,基本的参数传递方式有传值和传地址两种 (	 D	)。
A: 在传值方式下,形参将值传给实参
B: 在传值方式下,实参不能是数组元素
C: 在传地址方式下,实参可以是任意的变量和表达式
D: 在传地址方式下,形参和实参间可以实现数据的双向传递
函数调用时基本的参数传递方式有传值与传地址两种,在传值方式下是将实参的值传递给形参,因此实参可以是表达式(或常量),也可以是变量(或数组元素),这种信息传递是单方向的,形参不能再将值传回给实参。在传地址方式下,需要将实参的地址传递给形参,因此,实参必须是变量(数组名或数组元素),不能是表达式(或常量)。这种方式下,被调用函数中对形式参数的修改实际上就是对实际参数的修改,因此客观上可以实现数据的双向传递。

4.用户访问某WEB网站时,浏览器上显示“HTTP-404”错误,则故障原因是(D)。

A: 默认路由器配置不当			B: 用户无权访问			
C: WEB服务器内部出错			D: 所请求当前页面不存在  

解释:
	当Web服务器内部出错时,浏览器会显示"HTTP-500"错误。

5.折半(二分)查找方法对查找表的要求是 ( D )

A: 链表存储结构,元素有序排列			B: 链表存储结构,元素无序排列
C: 顺序存储结构,元素无序排列			D: 顺序存储结构,元素有序排列

解释:
	二分查找的基本思想是:首先将给定值与表中间位置上元素的关键字进行比较,若相等,则查找成功;若给定值大于表中间位置上元素的关键字,则下一次到查找表的后半子表进行二分查找,否则下一步到表的前半子表进行二分查找。这样就可逐步缩小范围,直到查找成功或子表为空时失败为止。显然,查找表的元素若是无序排列的方式,则上述查找过程是没有意义的。另外,由于需要能直接定位表中间位置的元素,即实现随机访问,因此只有顺序存储结构能满足此要求,在链表上只能进行顺序查找。

6.若需将一个栈S中的元素逆置,则以下处理方式中正确的是 ( D )

A: 将栈S中的元素依次出栈并入栈T,然后栈T中元素依次出栈并入栈S   还是原来的顺序
B: 直接交换栈顶元素和栈底元素			
C: 直接交换栈顶指针和栈底指针
D: 将栈S中的元素依次出栈并入队,然后使该队列元素依次出队并入栈S
解释:
	栈是后进先出,队列是先进先出

7.关于查找运算及查找表的叙述,正确的是( ABD)

A: 哈希表可以动态创建
B: 二叉排序树属于动态查找表
C: 二分查找表要求查找表采用顺序存储结构或循环链表结构
D: 顺序查找方法既适用于顺序存储结构,也适用于链表结构

解释:
	链式存储是顺序查找

8.E-R图的三要素是( BCD)

A: 基本表	B: 实体		C: 联系		D: 属性

解释:
	E-R方法的三要素是:实体(entity)、属性(attribute)、联系(relationship)。
	矩形框代表实体;表示连接两个实体之间的联系用菱形框表示;椭圆表示实体的属性

9.执行下列代码后,String[ ] s = new String[10],哪个结论是正确的(B D)

A: s[10]为“”		B: s[9]为null		 C: s[0]为未定义		D: s.length为10

10.指出下列哪个方法与方法public void add(int a){}为合理的重载方法( B C )

A: public int add(int a)			B: public void add(long a)
C: public void add(int a,int b)		D: public int add(float a)

解释:
	重载就是方法名相同参数列表不相同

11.下列说法正确的是 (A C )

A: 环境变量可在编译source code时指定
B: 在编译程序时,所能指定的环境变量不包括class path
C: javac一次可同时编译数个java源文件
D: javac.exe能指定编译结果要置于哪个目录(directory)

12.若程序中定义了全局变量和局部变量,则下面说法错误的是(ABC )

A: 在函数内只能访问局部变量,但不能访问全局变量
B: 局部变量的名字和全局变量的名字不能相同
C: 一个函数被多次调用的时候,其定义的局部变量必定分配同一个存储单元
D: 函数中定义的局部变量和全局变量同名时,在函数内引用的是局部变量

解释:
	变量的作用域是引用变量的代码范围,可以是局部的,也可以是全局的。全局变量的作用域是整个程序或文件,在函数内完全可以访问全局变量。所以,选项A的说法是错误的。 在程序运行过程中,每次调用一个函数,都会为该函数的运行创建活动记录,其中包括函数运行所需要的数据信息以及控制信息,在函数运行结束后,则释放这些活动记录。如果函数多次运行,那么定义的局部变量不一定分配同一个存储单元。所以,选项C的说法错误。 局部变量的作用域是定义该变量的函数。根据最近嵌套原则,如果全局变量与局部变量的名称相同,那么,在局部变量的作用域中,引用的是局部变量。选项D的说法正确,相应,选项B的说法错误。

13.关于栈和队列的叙述,正确的是(ABC )

A: 栈和队列都是操作受限的线性表
B: 队列采用单循环链表存储时,只需设置队尾指针就可使入队和出队操作时间复杂度都为O(1)
C: 若队列的数据规模n可以确定,则采用顺序存储结构比链式存储结构效率更高
D: 利用两个栈可以模拟一个队列的操作,反之亦可

解释:
	队列是先进先出栈是后进先出   两者的性质不一样无法模拟

14.下面(BC)是java多态的实现。

A: 继承			B: 重载			C: 覆盖			D: 封装

15.下列说法错误的是( )

A: JAVA面向对象语言容许单独的过程与函数存在
B: JAVA面向对象语言容许单独的方法存在
C: JAVA语言中的方法属于类中的成员(member)
D: JAVA语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同

16.( ABC )are Data Manipulation Language Commands.

A: INSERT		B: DELETE			C: UPDATE		D: CREATE

解释:
	数据操作语言

简答题

1.Linux中列出当前目录下所有文件的命令。 ls -l

2.写出JAVA的基本类型。

数值型 
	整数型:byte  int  short  long  
	小数型:float  double
布尔型  boolean
字符型 :char

3.在try语句里有return语句,最后写有finally语句,finally语句中的code会不会被执行?何时执行?如果执行,在return前还是后?

	会执行,finally语句总会执行的除非遇到一些特殊情况如Systemexit(0)
return语句并不一定就结束一段程序,当它和finally一起使用但是finally语句中无return时会先等finally语句执行完成后再返回值,

当finally语句中有return语句时会直接返回finally中return的语句。

4.==与equals()的区别。

 == 操符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用  ==   操作符
    如果一个变量所指向的数据是对象类型额,那么这时候设计了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Object  obj = new  Object();  变量obj是一个内存   new Object() 是另外一块内存,此时,变量obj锁碎影的内存中存储的数值就是对象占用的那块内存的首地址。
    equals方法是用于比较两个独立对象的内容是否相同,
    简单的说就是  ==  这个用于比较两个对象的地址是否相同,记住,通过new 出来的对象一定是不同的,equals用于比较对象的内容是否相同

5.Java进程和线程有什么区别?多线程有哪几种方法实现?

定义:
	进程:具有一定独立功能的程序关于某个数据集合上的一次性活动,进程是系统进行资源分配和调度的一个独立单位。
	线程:进程的一个实体,是CPU调度和分派的基本单位,他是笔记吃那个更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是他与同一个进程的其他线程共享进程所拥有的全部资源

2.关系:
	一个线程可以创建和撤销另一个线程;同一个金成中的多个线程之间可以并发执行,相对进程而言线程是一个更加接近于执行体的概念,他可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列

3.区别:
	一个程序至少有一个进程,一个进程至少有一个线程线程的划分尺度小于进程,使得多线程程序的并发性高
	进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
	每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中。
	从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

实现方式:
	继承Thread和实现Runnable接口

6.说说ArrayList,Vector和LinkedList的存储性能和特性。

	ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
	Vector属于遗留容器(Java早期的版本中提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、Properties都是遗留容器),已经不推荐使用,但是由于ArrayList和LinkedListed都是非线程安全的,如果遇到多个线程操作同一个容器的场景,则可以通过工具类Collections中的synchronizedList方法将其转换成线程安全的容器后再使用

7.final,finally,finalize的区别。

	final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
          内部类要访问局部变量,局部变量必须定义成final类型
    finally 是一场处理语句结构的一部分,表示总是执行。
    finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收。  

8.什么是JSP?写出JSP的内置对象。

	JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,是一种动态网页技术
	内置对象:
		request     请求对象
		response    响应对象
		pageContext   页面上下文对象
		session     会话对象
		application  应用程序对象
		out          输出对象
		config       配置对象
		page         页面对象
		exception    例外对象

9.简述MVC模型和你了解的struts,spring和hibernate。

	MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

10.谈谈你所了解的java应用服务器。

WEB 服务器
	Tomcat 、Bejy Tiger 、Geronimo 、 Jetty 、Jonas 、Jrun 、Orion 、Resin。

Java EE 服务器
	TongWeb 、BES Application Server 、 Apusic Application Server 、 IBM Websphere 、Sun Application Server 、Oracle 的 Oracle9i/AS 、Sun Java System Application Server 、Bea Weblogic 、JBoss、开源GlassFish。

11.谈谈你所了解到的javascript框架。

	1. jQuery
		其功能包括事件处理、动画以及更多其它方向。在构建Web项目时,大家当然不希望把时间浪费在为简单任务编写代码身上。jQuery凭借着其易于使用的API帮助我们解决这项难题。它还能够与全部主流浏览器协作。利用jQuery,大家可以无缝化控制DOM并开发Ajax应用。利用jQuery,开发者无需担心底层交互并能够轻松开发出自己构想中的Web应用。
	2. Angular.js
		Angular.js的核心设计思路在于单页面应用模式,但其同时亦支持MVC架构。利用Angular.js,开发者能够在前端使用JavaScript代码,从而随意扩展HTML词汇。还采用了数据绑定这一重要概念。用户利用该接口进行交互,当交互完成后,视图即随后利用新值进行更新,从而确保全部内容得到同步。DOM更新则在底层逻辑于模型中执行完毕之后再开始进行。
	3.  Node.js
		其可用于配合真实数据构建高速且极具可扩展性的应用程序。其既非框架亦非库,而是一套基于谷歌Chrome JavaScript V8引擎的运行时环境。大家可以利用Node.js创建多样的应用,包括单页应用、实时Web应用等等。从技术层面讲,Node.js的事件驱动型架构能够支持异步I/O,这使其成为开发高扩展性解决方案的理想选项。

12.区别下来四种修饰符,在相应作用域上打勾。

作用域	    	当前类	      同一package	       子孙类	         其他package
public	  	   1				1			   1			   1
protected 		1				1				1	
friendly		1		       1		
private			1		
	
不写时默认为____friendly_

数据库题

1.数据库drop,truncate和delete分别有什么作用?

TRUNCATE   TABLE   不能用于参与了索引视图的表。  
delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。
安全性:小心使用 drop 和 truncate,尤其没有备份的时候.
速度,一般来说: drop> truncate > delete

2.触发器的作用。

触发器作用
	(1)数据确认
	(2)实施复杂的安全性检查
	(3)做日志记录,跟踪表上所做的数据操作等
	(4)数据的备份和同步;


触发器的类型(常见)
	语句级触发器 :在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。
	行级触发器(for each row) :触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量, 识别值的状态。

4.什么是主键?什么是外键?

	主键是能确定一条记录的唯一标识;
	外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性

5.请简述什么是数据库事务?并写出对应的英文单词?

	是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
	transaction

6.谈谈分页查询语句中SQL中的实现。

Orcale数据库
	在Oracle中用于分页显示的sql语句关键词:rownum。
	select * from student rownum<=4


select * from 表名  limit  (pagenum-1)*pagesize, pagesize;
pagenum是当前第几页,pagesize是每页的条数。那么(pagenum-1)*pagesize就表示翻过 这些条数,接着显示 pagesize  条。
原文地址:https://www.cnblogs.com/qichunlin/p/9303008.html