美文网首页
2020-09-17日面试

2020-09-17日面试

作者: 编程人生 | 来源:发表于2020-09-19 14:47 被阅读0次

    很久没参加过面试了,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方法服务。

    程序计数器:记录当前线程 执行的行号。  

    大致这些问题, 总结一下这次面试暴露出很多问题,自己要勤奋学习,弥补自己不足。一定会达到自己目标

    相关文章

      网友评论

          本文标题:2020-09-17日面试

          本文链接:https://www.haomeiwen.com/subject/rmkeyktx.html