面经——浩鲸云实习面牛客总结

1.面向对象的三大特性:封装,继承,多态

封装:把属性隐藏起来;把尽可能多的东西封装起来,对外提供简介的接口

继承:子类继承父类的特征和行为

多态:同一个行为,不同子类的对象具有不同的表达形式

2.重载和重写的区别

重载:同一个类中定义多个同名的方法,但是他们的参数不可以完全相同;是编译时的多态;对返回值没有要求

重写:子类对父类的方法进行重新定义;是运行时的多态;要求与父类返回值类型相同或者为其子类

3.NIO与BIO的区别

BIO:同步阻塞IO,线程在进行IO操作时不允许进行其他操作,以流的形式处理数据,

NIO:非阻塞型IO,允许线程在进行IO操作时进行其他操作,以块的形式处理数据,性能比较好

个人感觉BIO就是用来HTTP请求的,然后NIO就可以用像WS这种请求使用很合适

4.讲讲list,set,map

  • list是有序,可以通过索引访问
    • arraylist:基于数组,可以动态扩容,增删效率较低,但是查找效率高
    • linkedlist:基于双向链表,增删效率高,查找效率低
  • set是无序,去重的,我之前写算法的时候习惯用set的contains判断元素是否存在
    • hashset:基于哈希表实现,操作效率高,都是常数级
    • treeset:基于红黑树实现,是自然排序的,也可以自定义比较器
  • map:kv键值对,键唯一,值可以重复
    • hashmap:基于哈希表,允许KV都为null,不保证顺序
    • hashtable:在hashmap的基础上实现了线程安全,但由于每个方法上都有synchronize关键字,效率比较低
    • treemap:基于红黑树,可以对K排序
    • concurrenthashmap:转为并发设计的map,比hashtable性能更好;KV都不允许为null,保证并发的安全性与一致性,避免空指针异常

5.对JVM的了解

stackoverflowerror :递归爆了或者爆栈了

outofmemoryerror:堆内存溢出,内存泄露

调优:堆内设置

6.堆和栈的区别

数据结构上:栈是LIFO,堆是树形结构

存储内容上:栈用于存储局部变量,函数返回的地址,调用函数的参数,里面的东西一般生命周期较短;堆用于存储动态数组,对象实例,里面的东西一般生命周期较长

7.线程池

由线程池管理器,工作队列,线程池线程组成

线程池管理器用于管理线程;工作队列用于存储待执行的任务;线程池进程就是实际执行任务的线程

8.autowired和resourse区别

autowired是bytype,resource是byname

autowired不能注入基本数据类型或字符串等非bean对象

9.讲讲IOC和AOP

IOC就是将对象间的依赖关系的控制权由程序内部移交给程序外部,让spring框架负责

AOP主要是通过动态代理对方法进行拦截处理,将一些无关业务逻辑的部分切出来,方便复用

10.mysql索引的底层原理

主要使用B树或者B+树作为索引结构,依赖于存储引擎的实现。默认的是innodb,他支持事务和外键。另一个常用的是myisam,不支持事务和外键

11.UNION和UNION ALL是区别

都是用于合并两个select语句的结果集的操作符

UNION会去重,UNION ALL不会去重

12.SQL优化

不用select *;优化where,利用索引并且尽量不在索引列上用表达式

posted @   天启A  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示