2019-06-24 面试题
2019-07-03 本文已影响0人
zecan
1.算法题: 一个圆环上有10(0~9)个点,判断走了n步后能不能重新回到原点0。
2.java基础题 override和overload的区别。如果方法名参数类型都一样,会有什么影响。
override 子类重写父类的方法,当子类调用这个方法时,无论子类是否有强转为父类,子类自调用自己重写的方法。
overload 一个类中的返回类型和参数名必须相同,不同的只有参数类型以及参数个数。如果方法名以及参数都一样,只有返回类型不一样,会导致编译不通过。
3.java基础 overwrite父类方法,父类方法有抛异常,子类重写的方法需要抛异常吗?
当父类方法抛出异常时,子类去Override这个方法,需要抛出父类异常的子类,或者是不抛出异常。
假设父类方法抛出两个异常,那么子类重写这个方法,只能抛出这两个异常,其中一个,或者不抛出异常。
子类重写方法的返回值必须比父类方法的返回值小(返回类型是父类的子集 例如Object和String),否则报错。
因为假设父类方法抛出一个异常,但是子类方法重写的方法抛出的异常大于父类。我们一般接口编程都是使
用父类对象来接收子类对象,抛出的异常也是父类的异常。此时如果子类的重写方法抛出的异常是父类方法
没有的,那么就会导致无法捕捉到。
4.数据库题:索引的作用,索引是如何加快查询速度的,数据库如何建立索引,一个索引里面怎么才能有两个字段
首先建立索引需要额外的空间,大约占数据量5%左右,索引字段都是排好序的,索引的实现一般采用b树及其变种b+树。
由于索引是排好序的,所以采用二分查找法,只需log2N,极大的提高了数据的查询效率。由于二分查找的原因,索引的重复性要尽可能的低,如性别只有男或者女是不建议用来建立索引的。而且对于每次的update/insert/delete操作都需要去更新索引。
数据库建表时,一般会默认把主键设置为索引,而且是聚集索引,但是外键不会默认建立索引。对于手工建立的索引一般是非聚集索引,创建聚集索引的语法如下:create clustered index 索引名 on 表名(字段名)。
对于聚集索引,一般是存索引值以及物理地址,所以当找到聚集索引后,直接访问物理地址可以拿到所有的数据。对于非聚集索引,找到后可以拿到主键,然后拿着主键通过聚集索引可以查出所有数据。
对哪些字段添加索引
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
mysql一般是左联查询,where语句一般先从最左边条件开始查询,所以应把过滤条件最大的写在最左边。oracle应写在最右边。
5.数据库题:对于有大的数据量的查询,如何做性能优化
1.查询时select 尽量不要用*,只查出关键字段,select的字段尽量不要做运算。
2.合理建立索引,在 where 及 order by 涉及的列上建立索引。注意索引失效的情形
(1)where 语句索引字段查询一般不要用is null 和is not null、<>、 in和not in、like的前面用‘%’,索引字段进行运算。
(2)如果条件中有索引,用了or连接,也会失效
3.尽可能用UNION ALL取代UNION
4.分区、分表以及分库
5.大量数据插入的时候,考虑先删除索引,然后重建索引。这样做的缺点是业务不能同时进行
6. 避免在查询时使用表连接
7.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
8.很多时候用 exists 代替 in 是一个好的选择:
6.http协议:http协议是如何发送请求的。
当我们在浏览器地址栏输入www.baidu.com后,就会发起一个http请求,
(1)应用层的DNS服务会把域名转换为ip地址。
(2)传输层决定用哪种传输方式,是tcp还是udp。
(3)网络层报文首部会加上ip,决定这条请求该走哪条线路,ip表示网卡在网络中的通讯地址。
(4)数据链路层加上mac头,决定最终发送的网卡mac地址。
(5)物理层将数据转换为比特流。
(6)服务器再按照从底层到顶层一层层封装回去。