华为面试题库.docx
《华为面试题库.docx》由会员分享,可在线阅读,更多相关《华为面试题库.docx(35页珍藏版)》请在冰豆网上搜索。
华为面试题库
一、华为题库
1)tcpip应用层之上几种合同
详细阐明内容:
OSI是一种开放性通信系统互连参照模型,她是一种定义得非常好合同规范。
OSI模型有7层构造,每层都可以有几种子层。
OSI7层从上到下分别是
7应用层6表达层5会话层4传播层3网络层2数据链路层1物理层;
其中高层(即7、6、5、4层)定义了应用程序功能,下面3层(即3、2、1层)重要面向通过网络端到端数据流。
其中传播层包括tcpudpspx等合同
Tcpip模型是一系列网络合同总称。
Tcpip模型四层构造:
这些合同提成四个层次,上一层合同都如下一层合同为基本。
从下到上四层,连接层(LindLayer)、网络层(InternetLayer)、传播层(TransportLayer)、应用层(ApplicationLayer)。
1、连接层负责建立电路连接,是整个网络物理基本,典型合同涉及以太网、ADSL等。
数据链路层。
这个层次为待传送数据加入一种以太网合同头,并进行CRC编码,为最后数据传播做准备。
再往下则是硬件层次了,负责网络传播,这个层次定义涉及网线制式,网卡定义等等(这些咱们就不用关怀了,咱们也不做网卡),因此有些书并不把这个层次放在tcp/ip合同族里面,由于它几乎和tcp/ip合同编写者没有任何关系。
发送合同主机从上自下将数据按照合同封装,而接受数据主机则按照合同从得到数据包解开,最后拿到需要数据。
这种构造非常有栈味道,因此某些文章也把tcp/ip合同族称为tcp/ip合同栈。
2、网络层负责分派地址和传送二进制数据,重要合同是IP合同。
3、传播层负责传送文本数据,重要合同是TCP合同、UDP合同
4、应用层负责传送各种最后形态数据,是直接与顾客打交道层,典型合同是HTTP、FTP等。
TCP/IP详解学习笔记
(1)-基本概念
互联网IP地址:
当前,普通使用IP地址是一种32bit数字,也就是咱们常说IPv4原则,这32bit数字提成四组,也就是常用255.255.255.255样式。
IPv4原则上,地址被分为五类,咱们惯用是B类地址。
详细分类请参照其她文档。
需要注意是IP地址是网络号+主机号组合,这非常重要。
32Bit提成四组,一组8bit
2^8=16*16=256
域名系统
域名系统是一种分布数据库,它提供将主机名(就是网址啦)转换成IP地址服务。
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,注意PPPMTU并不是一种物理定义,而是指一种逻辑定义(个人以为就是用程序控制)。
可以用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链接javacode
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="test";
Connectioncon=DriverManager.getConnection(url,user,password);
2)连接DB2数据库
Class.forName("com.ibm.db2.jcc.DB2Driver");
Stringurl="JDBC:
db2:
//localhost:
5000/testDb";
Stringuser="test";Stringpassword="test";
Connectioncon=DriverManager.getConnection(url,user,password);
3)连接MySQL数据库
Class.forName("com.mysql.jdbc.Driver");
Stringurl="JDBC:
mysql:
//localhost:
8080/testDB";
Stringuser="test";Stringpassword="test";
Connectioncon=DriverManager.getConnection(url,user,password);
4)连接SQLServer数据库
Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver");
Stringurl="JDBC:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=testDb";
Stringuser="test";Stringpassword="test";
Connectioncon=DriverManager.getConnection(url,user,password);
5)连接PostgreSQL数据库
Class.forName("org.postgresql.Driver");
Stringurl="JDBC:
postgresql:
//localhost/testDb";
Stringuser="test";Stringpassword="test";
Connectioncon=DriverManager.getConnection(url,user,password);
6)连接Access数据库
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Stringurl="JDBC:
odbc:
Driver={MicrosoftAccessDriver(*.mdb)};DBQ="+application.getRealPath("/Data/testDb/mdb");
Connectionconn=DriverManager.getConnection(url,"","");
7连接Sybase数据库
Class.forName("com.sybase.JDBC.SybDriver");
Stringurl="JDBC:
sybase:
Tds:
localhost:
5007/testDb";
Propertiespro=System.getProperties();
pro.put("user","userId");
pro.put("password","user_password");
Connectioncon=DriverManager.getConnection(url,pro);
8连接informix数据库
Class.forName("com.informix.JDBC.ifxDriver");
Stringurl="JDBC:
informix-sqli:
localhost:
1533/testDb:
INFORMIXSERVER=myserver"user=testUser;password=testpassword";Connectioncon=DriverManager.getConnection(url);
9)就是那个保存数组
面试题目问题
10)dataset和list使用区别
11)java框架问题
spring3.0
spring
struts
hibernate
12)内存溢出为什么会浮现内存溢出如何解决内存溢出
13)dataset几种实现
14)原则html写界面code
15)前台界面某些封装类可以直接使用有哪些
JavaScript内置对象
JavaScriptDOM对象
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(frominttemp=array[to];
inti=from-1;
for(intj=from;jif(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)排序法是将两个(或两个以上)有序表合并成一种新有序表,即把待排序序列分为若干个子序列,每个子序列是有序。
然后再把有序子序列合并为整体有序序列。
(2)实例:
实现-1
publicvoidmergeSort(int[]data,intleft,intright){
//TODOAuto-generatedmethodstub
if(left//找出中间索引
intcenter=(left+right)/2;
//对左边数组进行递归
mergeSort(data,left,center);
//对右边数组进行递归
mergeSort(data,center+1,right);
//合并
merge(data,left,center,right);
}
}
publicvoidmerge(int[]data,intleft,intcenter,intright){
//TODOAuto-generatedmethodstub
int[]tmpArr=newint[data.length];
intmid=center+1;
//third记录中间数组索引
intthird=left;
inttmp=left;
while(left<=center&&mid<=right){
//从两个数组中取出最小放入中间数组
if(data[left]<=data[mid]){
tmpArr[third++]=data[left++];
}else{
tmpArr[third++]=data[mid++];
}
}
//剩余某些依次放入中间数组
while(mid<=right){
tmpArr[third++]=data[mid++];
}
while(left<=center){
tmpArr[third++]=data[left++];
}
//将中间数组中内容复制回原数组
while(tmp<=right){
data[tmp]=tmpArr[tmp++];
}
System.out.println(Arrays.toString(data));
}
3 堆排序
简介:
堆积排序(Heapsort)是指运用堆这种数据构造所设计一种排序算法。
堆是一种近似完全二叉树构造,并同步满足堆性质:
即子结点键值或索引总是不大于(或者不不大于)它父节点。
环节:
(1)基本思想:
堆排序是一种树形选取排序,是对直接选取排序有效改进。
堆定义如下:
具备n个元素序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)时称之为堆。
在这里只讨论满足前者条件堆。
由堆定义可以看出,堆顶元素(即第一种元素)必为最大项(大顶堆)。
完全二叉树可以很直观地表达堆构造。
堆顶为根,其他为左子树、右子树。
初始时把要排序数序列看作是一棵顺序存储二叉树,调节它们存储序,使之成为一种堆,这时堆根节点数最大。
然后将根节点与堆最后一种节点互换。
然后对前面(n-1)个数重新调节使之成为堆。
依此类推,直到只有两个节点堆,并对它们作互换,最后得到有n个节点有序序列。
从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆最后一种元素互换位置。
因此堆排序有两个函数构成。
一是建堆渗入函数,二是重复调用渗入函数实现排序函数。
(2)实例:
初始序列:
46,79,56,38,40,84
建堆:
互换,从堆中踢出最大数
剩余结点再建堆,再互换踢出最大数
依次类推:
最后堆中剩余最后两个结点互换,踢出一种,排序完毕。
publicvoidheapSort(int[]a){
System.out.println("开始排序");
intarrayLength=a.length;
//循环建堆
for(inti=0;i//建堆
buildMaxHeap(a,arrayLength-1-i);
//互换堆顶和最后一种元素
swap(a,0,arrayLength-1-i);
System.out.println(Arrays.toString(a));
}
}
privatevoidswap(int[]data,inti,i