很久没参加过面试了,2020-09-17参见了一次面试,感觉很不好,现在总结下。。
问题一:介绍下自己
我突然间不知道怎么介绍自己,介绍哪方面。当场尴尬了。。。面试官也无奈了 ,直接说还是我来问你吧。
问题二:前端框架都用过哪些?
我用过js ,extjs, jquery。其他框架没有用过
开始java问题,后来回想下自己对自己的回答都觉得太差了。。
问题四:java中基本数据类型有哪些
这个竟然答错了。。
java中八大基本数据类型:
整型: byte --1字节 short --2 字节 int ---4字节 long 8字节
long 后面需要 L或 l
浮点型:单精度 float , 数值后加f 双精度 double
char 类型 用 ‘’ 单引号 , 如‘S’
布尔类型: boolean 值 :true or false
问题五:short a = 10 a = a+10 a 是啥类型 我竟然答结果是int类型。。。。
问题六:sql优化 方法
我的答案:1、加索引 2、少关联大表
问题7: 联合索引 那种情况下会失效
我的答案:加函数是会失效
面试官又举例: a /b/c/d 四个字段 加联合索引 , 使用 a+b 或者 c+d 会失效吗?我答会失效
问题7: 队列和栈的区别
我答:队列是先进先出 栈是先进后出 回答的有点缓慢了 、、
问题8:哪种场景下使用队列
我答:生产者- 消费者模型 时使用队列
优先级对列:(priority queue)中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。也就是说,无论何时调用remove方法,总会获得当前优先级队列中最小的元素。
优先级队列使用了一个优雅且高效的数据结构,称为堆。堆是一个可以自我调节的二叉树,对树执行添加add 和 删除 remove 方法 ,可以让最小的元素移动到根部,不必会费时间进行排序。
使用优先级队列典型示例 :任务调度。每一个任务有一个优先级,任务以随机的顺序添加到队列中。每当启动一个新任务,都将优先级最高的任务从对队列中删除(习惯上将1 设为“最高”优先级,所以会将最小的元素删除)
并发Queue
在并发队列上 , jdk 提供了两套实现,一个是以ConcurrentLinkedQueue 为代表的高性能队列,一个是以BlockingQueue 接口为代表的阻塞队列。
ConcurrentLinkedQueue 是一个适用于高并发场景下的队列。它通过无锁的方式,实现高并发状态下的高性能。通常,ConcurrentLinkedQueue的性能要好于BlockingQueue.
以LinkedBlockingQueue 为代表的BlockingQueue,与ConcurrentLinkedQueue 的使用场景不同, BlockingQueue 的主要功能并不是在于提升高并发时队列的性能,而是简化多线程之间的数据共享。
BlockingQueue 接口的主要实现如图:
ArrayBlockingQueue<E>
DelayedWorkQueue
DelayQueue <E>
LinkedBlockingQueue<E>
PriorityBlockingQueue<E>
SynchronousQueue<E>
BlockingQueue 的典型使用场景是生产者-消费者模式中,生产者总是将产品放入BlockingQueue 队列,而消费者从对列中取出产品消费,从而实现数据共享。
并发Deque
在JDK 1.6中,还提供了一种双端队列,简称Deque 。Deque 允许在队列头部或者尾部进行出队和入队操作。
LinkedList 、ArrayDeque 、和linkedBlockingDeque 它们都实现了双端队列Deque接口。其中LinkedList 使用链表实现了双端队列, ArrayDeque 使用数组实现了双端队列。通常情况下ArrayDeque 基于数组实现,拥有高效的随机访问性能,因此ArrayDeque 具有更好的遍历性能。
LinkedList 没有内存调整和数组复制的负担,性能表现会更好。但无论是LinkedList 还是ArrayDeque 都不是线程安全的。
LinkedBlockingDeque 是一个线程安全的双端队列实现。使用链表的结构,每一个队列节点都维护一个前驱点和一个后驱点。LinkedBlockingDeque 没有进行复杂的读写锁的分离,因此同一时间只能有一个线程对其进行操作。因此,在高并发应用中,它的性能表现要远远低于LinkedBlockingDeque 。
问题九:游标
并未用过游标,下面是百度中总结
游标是一种从表中检索数据并进行操作的灵活手段,游标主要用在服务器上,处理由客户端发送给服务端的sql语句,或是批处理、存储过程、触发器中的数据处理请求。游标的优点在于它可以定位到结果集中的某一行,并可以对该行数据执行特定操作。一个完整的游标由5部分组成:
(1)声明游标 (2)打开游标 (3)从一个游标中查找信息 (4)关闭游标 (5)释放游标
2、在性能上,游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源还有更多的代码量。可是为什么学习游标呢?
1 现存系统有一些游标,我们查询必须通过游标来实现
2 作为一个备用方式,当我们穷尽了while循环,子查询,临时表,表变量,自建函数或其他方式仍然无法实现某些查询的时候用游标来实现。
较为详细的内容参照:https://www.cnblogs.com/jksun/p/8336393.html 这篇文章。
问题十:jvm 堆 、栈、方法区
JVM分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里,class类信息常量池(static 常量 和static变量)等放在方法区。
方法区:主要存储类的信息,常量池(static 常量和static 变量),编译后的代码(字节码)等数据
堆:初始化的对象 ,成员变量(那种非static 的变量),所有的对象实例和数组都要在 堆上分配。
栈:栈的结构是栈帧组成,调用一个方法压入一个帧,帧上面存储局部变量表,操作数栈,方法出口等信息。局部变量表存放的是8大基础类型加上一个引用类型,所以还是一个指向地址的指针。
本地方法栈:主要为Native方法服务。
程序计数器:记录当前线程 执行的行号。
大致这些问题, 总结一下这次面试暴露出很多问题,自己要勤奋学习,弥补自己不足。一定会达到自己目标
网友评论