第一次面试
目录
- 类和对象有什么区别
- 谈谈对多态的理解
- 变量类型
- 字符串如何比较大小,区分大小写吗?不区分大小写如何比较
- 介绍一下map
- 前后端数据怎么交互的,数据如何取到的
- SpringMVC怎么封装接口,地址如何映射,如何实现短信接口
- 说说MVC三个层
- int和interger的区别
- 什么时候用list什么时候用数组
- linklist和arraylist的区别
- 集合有哪些接口,他们有什么区别
- 说说springboot的理解
- 数据库怎么设计一对一,一对多和多对多
- 重载和重写的区别
- 接口和抽象类的区别
- get和post的区别
- http和https的区别
- 了解线程吗,他和进程有什么区别
- sleep和wait的区别
- Cookie和Session分别是什么以及区别
- run和start的区别
- aop在什么情况下会使用到
- final 关键字的作用
类和对象有什么区别
类是抽象的概念,是一个模板,类是对象的类型,对象是类的实例
谈谈对多态的理解
实现多态三要素:
- 继承
- 重写
- 父类引用指向子类对象(向上转型)
变量类型
八大基本数据类型
字符串如何比较大小,区分大小写吗?不区分大小写如何比较
- equals() 方法将逐个地比较两个字符串的每个字符是否相同
- equalsIgnoreCase() 比较时不区分大小写
- compareTo() 方法用于按字典顺序比较两个字符串的大小
介绍一下map
前后端数据怎么交互的,数据如何取到的
通过ajax传递数据
- 前端请求数据URL
- 后端接口接收数据返回数据
SpringMVC怎么封装接口,地址如何映射,如何实现短信接口
- 接口封装在controller层,requesmapping底层原理
- DispathcerServlet获取到请求信息之后,调用 HandlerMapping 处理器映射器,其目的是通过根据请求地址找到对应的 Controller 类和 Controller 中具体的方法
- 在controller添加相应的注解和接口路径,调用servic层的方法,将短信存入缓存,放入消息队列,监听短信发送短信给用户
说说MVC三个层
- Model(模型):数据模型,提供要展示的数据,一般分离为dao层(数据处理)和service层(调用dao层完成业务处理)
- View(视图):负责进行模型的展示
- Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示
int和interger的区别
- int是基本数据类型,integer是int的包装类
- int的默认值是0,integer的默认值是null,nteger能区分0和未赋值的情况,而int不能
- Integer变量必须实例化
- int则是直接存储数据值,Integer实际是对象的引用
什么时候用list什么时候用数组
数组长度固定,List未限定长度,不需要复杂功能和确定长度的情况下,使用数组效率更高
linklist和arraylist的区别
ArrayList底层是数组,增删慢,查找快,LinkedList底层是双向链表,增删快,查找慢
集合有哪些接口,他们有什么区别
- Collection(list,set接口)和Map接口(HashMap、LinkedHashMap、TreeMap、HashTable)
- List(ArrayList(底层数组),Vector(底层数组),LinkedList(底层双向链表)),set(HashSet(底层由HashMap实现),LinkedHashSet,TreeSet)
- list有放入顺序,可重复,set无放入顺序,不可重复
- ArrayList线程不安全效率高,vector相反
- ArrayList查找快,增删慢,LinkedList相反
- TreeSet是用来排序,要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小
说说springboot的理解
通过.properties或者.yml文件替代了Spring繁杂的XML配置文件,提供很多的插件,简化开发
数据库怎么设计一对一,一对多和多对多
- 一对一:外键唯一(拆分成两张表,第二张详细信息表加外键,且唯一性约束)
- 一对多:两张表,多的表加外键
- 多对多:三张表,关系表两个外键
重载和重写的区别
- 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载
- 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型且子类方法的访问权限修饰符要大于或者等于父类方法的访问权限修饰符
接口和抽象类的区别
- 成员的区别
- 接口没有构造方法,抽象类有构造方法(用于子类实例化使用)
- 接口中的成员变量只能是public static final类型的且必须初始化,抽象类中的成员变量可以是各种类型的
- 接口中所有的方法是public abstract方法(jdk1.8可以写以default和static开头的具体方法)
- 类和接口的关系区别
- 接口和接口之间支持多继承,抽象类不行
- 类可以实现多个接口
- 都不能被实例化,抽象是对类的抽象,是一种模板设计,接口是行为的 抽象,是一种行为的规范
get和post的区别
- get:参数url可见,通过拼接url进行传递参数,可以缓存,安全性差
- post:url参数不可见,通过body体传输参数,不可以缓存,安全性好
http和https的区别
- HTTP 是超文本传输协议,信息是明文传输,端口80
- HTTPS 则是具有安全性的 SSL 加密传输协议,端口443
了解线程吗,他和进程有什么区别
1.根本区别:进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元。
2.从属关系不同:进程中包含了线程,线程属于进程。
3.开销不同:进程的创建、销毁和切换的开销都远大于线程。
4.拥有资源不同:每个进程有自己的内存和资源,一个进程中的线程会共享这些内存和资源。
5.控制和影响能力不同:子进程无法影响父进程,而子线程可以影响父线程,如果主线程发生异常会影响其所在进程和子线程。
6.CPU利用率不同:进程的CPU利用率较低,因为上下文切换开销较大,而线程的CPU的利用率较高,上下文的切换速度快。
7.操纵者不同:进程的操纵者一般是操作系统,线程的操纵者一般是编程人员
sleep和wait的区别
- sleep:属于Thread类,在任何场景都能调用,不会释放锁
- wait:属于Object类,必须在同步代码块或同步方法中,释放锁,需要手动唤醒(notify方法)
Cookie和Session分别是什么以及区别
- Cookie:⼀段不超过4KB的小型⽂本数据
- Session:会话控制,记录客户状态的机制
- 区别:
-
- cookie和session都是用来跟踪浏览器用户身份的会话方式
-
- cookie数据保存在客户端(浏览器端)不安全,session数据保存在服务器端,相对安全
run和start的区别
调用 start() 方法是用来启动线程的,轮到该线程执行时,会自动调用 run();直接调用 run() 方法,无法达到启动多线程的目的,相当于主线程线性执行 Thread 对象的 run() 方法
aop在什么情况下会使用到
日志记录,权限验证,事务管理
final 关键字的作用
Final可以修饰类,属性,方法和局部变量
作用:
- 类不能被继承时
- 父类的方法不能被子类覆盖/重写时
- 变量属性不能被修改
