vivo提前批面试

1. Java包括哪些知识?
8大数据类型,对象与类,继承与接口,异常,泛型,反射,UI,并发线程,进程
2. 重载与重写的区别?
重写方法的规则:
1)、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2)、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3)、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4)、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
而重载的规则:
1)、必须具有不同的参数列表;
2)、可以有不同的返回类型,只要参数列表不同就可以了;
3)、可以有不同的访问修饰符;
4)、可以抛出不同的异常;
3. 抽象类与接口的区别,如何选择?
抽象类
特点:
1).抽象类中可以构造方法
2).抽象类中可以存在普通属性,方法,静态属性和方法,也可实现方法。
3).抽象类中可以存在抽象方法。
4).如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5).抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
接口
1).在接口中只有方法的声明,没有方法体。
2).在接口中只有常量,因为定义的变量,在编译的时候都会默认加上
public static final
3).在接口中的方法,永远都被public来修饰。
4).接口中没有构造方法,也不能实例化接口的对象。
5).接口可以实现多继承
6).接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法,则实现类定义为抽象类。
4. Java里的集合,用ArrayList实现set方法
基本接口是collection,有list,set,queue,map接口
Arraylist,Linkedlist,Hashset,Treeset,Hashmap,Treemap等实例
5. java线程池
线程池里有多个线程,可以实现线程的复用,线程池中包括很多准备运行的线程,为线程池提供一个Runnable,将有一个线程调用run,run退出后,这个线程不会死亡,留在池中准备下一个请求,使用完一个线程池,将线程池关闭,池中线程死亡
6. 从操作系统说一下线程的优先级
Java 作为跨平台语言,线程有 10 个等级,但是映射到不同操作系统的线程优先级值不一样,win(5个优先级)这导致即使我们在 Java 代码中设置了比较高的优先级,其实映射到操作系统的线程里面,并不一定比设置了低优先级的线程高,很有可能是相同的优先级,则优先级高的线程不代表一定比优先级低的线程优先执行,即高优先级的线程大概率比低优先的线程优先获得 CPU 资源
7. 数据结构中哪几种排序算法,分别时间复杂度,介绍快速排序
冒泡排序 O(n^2) 每一遍比较交换将最大的放末尾
选择排序O(n^2) 每一遍记住(不交换)最小的放开头
插入排序O(n^2) 将右边的插入到左边已经有序的里面
希尔排序O(n(logn)^2) 设置间隔h分组插入排序 逐渐减小h
快速排序O(nlogn) 取基准值划分数组 分组内部再划分
基数排序O(nlogn) 根据个位值分组排序 再根据十位等
归并排序O(nlogn) 将子数组排序 归并有序数组
堆排序O(nlogn) 将数组构建为一个堆 取堆顶 放到移除的位置
8. 数据库sql语句考察group by
在这里插入图片描述
在此举例,执行如下sql语句
SELECT name FROM test GROUPBY name
结果如下:
在这里插入图片描述
通过group by后的属性一致的对记录进行分组,若group by 后多个属性,将这些属性看做一个片段
select后一般不为* ,group后有些属性有多个值,可以用聚合函数如count(i)
9. 数据库索引为什么快
索引对记录按照多个字段进行排序,对表中的某个字段建立索引会创建另一种数据结构(多为B+树),其中保存着字段的值,每个值又指向与它相关的记录,这种索引的数据结构是经过排序的,因而可以对其执行二分查找,速度更快
10. 以Linux为例,说说线程与进程的区别
1)、进程是资源分配最小单位,线程是程序执行的最小单位
2)、进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据
3)、CPU切换一个线程比切换进程花费小;
4)、创建一个线程比进程开销小
5)、线程占用的资源要⽐进程少很多
6)、线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据,进程之间的通信需要以通信的方式(IPC)进行;(但多线程程序处理好同步与互斥是个难点)
7)、多进程程序更安全,生命力更强,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间),多线程程序更不易维护,一个线程死掉,所有线程都死掉,(整个进程就死掉了(因为共享地址空间)???)
8)、进程对资源保护要求高,开销大,效率相对较低,线程资源保护要求不高,但开销小,效率高,可频繁切换
11. java中Thread类的方法
Thread(Runnable target) 构造一个新线程,调用target的run
run() 提供希望执行的任务指令
start() 启动这个线程,调用run
sleep() 休眠指定的毫秒数
currentThread() 返回代码段正在被哪个线程调用的信息
isAlive() 用于判断当前线程是否处于活动状态
getId() 取线程的唯一标识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值