华为面试题库Word文档格式.docx
《华为面试题库Word文档格式.docx》由会员分享,可在线阅读,更多相关《华为面试题库Word文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
RFC
RFC是什么?
RFC就是tcp/ip协议的标准文档,在这里我们可以看到RFC那长长的定义列表,现在它一共有4000多个协议的定义,当然,我们所要学习的,也就是那么十几个协议而已。
端口号(port)
注意,这个号码是用在TCP,UDP上的一个逻辑号码,并不是一个硬件端口,我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已。
应用编程接口
现在常用的编程接口有socket和TLI。
而前面的有时候也叫做“Berkeleysocket”,可见Berkeley对于网络的发展有多大的贡献。
TCP/IP详解学习笔记
(2)-数据链路层
数据链路层有三个目的:
∙
为IP模块发送和
接收IP数据报。
∙
为ARP模块发送ARP请求和接收ARP应答。
为RARP发送RARP请
求和接收RARP应答
ip大家都听说过。
至于ARP和RARP,ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议,在tcp/ip协议的后面章节会介绍它们(在局域网里面用ARP协议可以很容易的搞瘫痪网络哦)
数据链路层的协议还是很多的,有我们最常用的以太网(就是平时我们用的网卡)协议,也有不太常见的令牌环,还有FDDI,当然,还有国内现在相当普及的PPP协议(就是adsl宽带),以及一个loopback协议。
联系linux里面的ifconfig-a命令,这个命令通常会得到如下的结果
其中,eth0就是以太网接口,而lo则是loopback接口。
这也说明这个主机在网络链路层上至少支持loopback协议和以太网协议。
以太网(Ether-net)的定是指数字设备公司(
DigitalEquipmentCorp.)、英特尔公司(IntelCorp.)和Xerox公司在1982年联合公布的一个标准,这个标准里面使用了一种称作CSMA/CD的接入方法。
而IEEE802提供的标准集802.3(还有一部分定义到了802.2中)也提供了一个CSMA/CD的标准。
这两个标准稍有不同,TCP/IP协议对这种情况的处理方式如下:
·
以太网的IP数据报封装在RFC894中定义,而IEEE802网络的IP数据报封装在RFC1042中定义。
一台主机一定要能发送和接收RFC894定义的数据报。
一台主机可以接收RFC894和RFC1042的封装格式的混合数据报。
一台主机也许能够发送RFC1042数据报。
。
如果主机能同时发送两种类型的分组数
据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC894分组。
可见,RFC1042在TCP/IP里面处于一个配角的地位。
这两种不同的数据报格式请参考教材。
ppp(点对点协议)是从SLIP的替代品。
他们都提供了一种低速接入的解决方案。
而每一种数据链路层协议,都有一个MTU(最大传输单元)定义,在这个定义下面,如果IP数据报过大,则要进行分片(fragmentation),使得每片都小于MTU,注意PPP的MTU并不是一个物理定义,而是指一个逻辑定义(个人认为就是用程序控制)。
可以用netstat来打印出MTU的结果,比如键入netstat-in
上文摘自上面的网址
上面的是tcpip协议的补充
2)继承子类父类的问题extends关键字
理解继承是理解面向对象程序设计的关键。
在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。
在Java中不允许多继承。
子类可以覆盖父类的方法。
Java中是单继承,一个子类只能有一个直接父类。
子类包含于父类同名方法的现象称为方法重写,也成为方法覆盖。
Override。
方法的重写遵守“两同两小一大”规则,两同,方法名相同,形参列表相同。
两小指的子类返回值类型应该比父类方法返回值类型更小或者相等。
子类方法声明抛出的异常应该比父类方法声明抛出的异常类更小或者相等。
一大,子类的访问权限应该比父类方法更大或者相等。
覆盖方法和被覆盖的方法要么都是类方法,要么都是实例方法。
3)java的集合对象arraylistlinklisthashsethashmap的区别
arrayListLinkList
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。
(参考数组与链表来思考)
Arraylist适合查询linkedlist适合增删改
3.对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。
ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。
例如我们可以用ArrayList来存储一系列的String或者Integer。
那么ArrayList和LinkedList在性能上有什么差别呢?
什么时候应该用ArrayList什么时候又该用LinkedList呢?
java中ArrayList、LinkList区别
hashset和hashmap
4)Stringbuffer和String的比较
5)接口的说法
不能有proteced修饰的方法不能有static修饰的方法都是publicabstract修饰的方法都是publicvoid类型一个类能实现多个接口
接口里不允许定义静态方法,接口支持多继承。
接口的主要用途是被实现类实现
6)数据库连接池的原理
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。
更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。
7)collectionIterator接口
arraylisthashsethashmaplinklist
8)使用jdbc链接java的code
JDBC连接各种数据库的方法(经典)
Sqlserver
1.Public
void
FindAllUsers(){
2.
//1、装载sqlserver驱动对象
3.
DriverManager.registerDriver(new
SQLServerDriver());
4.
//2、通过JDBC建立数据库连接
5.
Connection
con
=DriverManager.getConnection("
jdbc:
sqlserver:
//192.168.2.6:
1433;
DatabaseName=customer"
"
sa"
123"
);
6.
//3、创建状态
7.
Statement
state
=con.createStatement();
8.
//4、查询数据库并返回结果
9.
ResultSet
result
=state.executeQuery("
select
*
from
users"
10.
//5、输出查询结果
11.
while(result.next()){
12.
System.out.println(result.getString("
email"
));
13.
}
14.
//6、断开数据库连接
15.
result.close();
16.
state.close();
17.
con.close();
18.
1)连接Oracle8/8i/9i/10g/11g(thin模式)
Class.forName("
oracle.JDBC.driver.OracleDriver"
).newInstance();
Stringurl="
JDBC:
oracle:
thin:
@localhost:
1521:
orcl"
//orcl为Oracle数据库的SID
Stringuser="
test"
;
Stringpassword="
Connectioncon=DriverManager.getConnection(url,user,password);
2)连接DB2数据库
com.ibm.db2.jcc.DB2Driver"
db2:
//localhost:
5000/testDb"
Stringpassword="
3)连接MySQL数据库
com.mysql.jdbc.Driver"
mysql:
8080/testDB"
4)连接SQLServer2000数据库
com.microsoft.JDBC.sqlserver.SQLServerDriver"
microsoft:
DatabaseName=testDb"
5)连接PostgreSQL数据库
org.postgresql.Driver"
postgresql:
//localhost/testDb"
6)连接Access数据库
sun.jdbc.odbc.JdbcOdbcDriver"
odbc:
Driver={MicrosoftAccessDriver(*.mdb)};
DBQ="
+application.getRealPath("
/Data/testDb/mdb"
Connectionconn=DriverManager.getConnection(url,"
"
7连接Sybase数据库
com.sybase.JDBC.SybDriver"
sybase:
Tds:
localhost:
5007/testDb"
Propertiespro=System.getProperties();
pro.put("
user"
userId"
password"
user_password"
Connectioncon=DriverManager.getConnection(url,pro);
8连接informix数据库
com.informix.JDBC.ifxDriver"
informix-sqli:
1533/testDb:
INFORMIXSERVER=myserver"
user=testUser;
password=testpassword"
Connectioncon=DriverManager.getConnection(url);
9)就是那个保存数组
面试题目问题
10)dataset和list的使用区别
11)java框架问题
spring3.0
http:
//www.open-
spring
struts
hibernate
12)内存溢出为何会出现内存溢出如何处理内存溢出
13)dataset的几个实现
14)标准html写界面的code
15)前台界面的一些封装类可以直接使用的有哪些
JavaScript内置对象
JavaScriptDOM对象
//www.caogen8.co/w3school/js/js_obj_htmldom.asp.htm
16)什么是线程安全什么是不安全?
17)shh架构struts关于action的使用
18)还有就是java的一些细节问题我记不住了你网上搜搜华为java面试会有好多看看就好了.
二、面试十大算法题目
1)字符串
如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。
2)链表
在Java中,链表的实现非常简单,每个节点Node都有一个值val和指向下个节点的链接next。
classNode{
intval;
Nodenext;
Node(intx){
val=x;
next=null;
}
}
将这些全部实现,并且记忆。
3)常用排序算法:
说明各个排序算法的具体实现。
关于直观展示各个排序算法的gif图片。
Verygood程序员必知的8种算法
集中排序算法的比较
1 快速排序:
基本思想:
1)先从队列中取出一个数据作为基准。
2)分区过程,将比这个数大的都放它右边,比它小的都放左边。
3)在针对左右区间,分别执行上述操作,直到左右区间都只剩下一个数。
采用的核心思路是递归的思路:
挖坑填数加分治法
(1)基本思想:
选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
(2)实例:
实现:
privatevoidquickSort(int[]array,intfrom,intto){
if(from<
to){
inttemp=array[to];
inti=from-1;
for(intj=from;
j<
to;
j++){
if(array[j]<
=temp){
i++;
inttempValue=array[j];
array[j]=array[i];
array[i]=tempValue;
}
array[to]=array[i+1];
array[i+1]=temp;
quickSort(array,from,i);
quickSort(array,i+1,to);
2 归并排序
介绍:
归并排序(Mergesort,台湾译作:
合并排序)是建立在归并操作上的一种有效的排序算法。
该算法是采用分治法(DivideandConquer)的一个非常典型的应用
步骤:
1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2.设定两个指针,最初位置分别为两个已经排序序列的起始位置
3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4.重复步骤3直到某一指针达到序列尾
5.将另一序列剩下的所有元素直接复制到合并序列尾
(1)基本排序:
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。
然后再把有序子序列合并为整体有序序列。
实现-1
publicvoidmergeSort(int[]data,intleft,intright){
//TODOAuto-generatedmethodstub
if(left<
right){
//找出中间索引
intcenter=(left+right)/2;
//对左边数组进行递归
mergeSort(data,left,center);
//对右边数组进