一、首先是常用的框架使用
1 什么是springboot ?
用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
创建独立的spring引用程序 main方法运行
简化maven配置
自动配置spring添加对应功能starter自动化配置
=========简单说就是:快速搭建、开发和运行Spring应用
2 Springboot 有哪些优点?
-快速创建独立运行的spring项目与主流框架集成
-使用嵌入式的servlet容器,应用无需打包成war包
-starters自动依赖与版本控制
-大量的自动配置,简化开发,也可修改默认值
-准生产环境的运行应用监控
-与云计算的天然集成
3.SpringCloud 和 Dubbo 有哪些区别?
首先,他们都是分布式管理框架。
最大的区别:
Spring Cloud是基于HTTP的REST方式 ;Dubbo 的是RPC通信。
4.SpringBoot 和 SpringCloud 之间关系? SpringBoot:专注于快速方便的开发单个个体微服务(关注微观);SpringCloud:关注全局的微服务协调治理框架,将SpringBoot开发的一个个单体微服务组合并管理起来(关注宏观);
SpringBoot可以离开SpringCloud独立使用,但是SpringCloud不可以离开SpringBoot,属于依赖关系。
5.什么Docker Docker是一个容器化平台,它以容器的形式将所有应用程序及其所有依赖项打包在一起,以确保所有应用程序在任何环境中无缝运行。
6.什么是Docker镜像 Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像。
7.docker常用命令 docker pull 拉取或者更新指定镜像 docker push 将镜像推送至远程仓库 docker rm 删除容器 docker rmi 删除镜像 docker images 列出所有镜像 docker ps 列出所有容器
RPC的详细过程
RPC主要的重点有: 动态代理,主要是invoke反射原理 序列化,使用Thrift的效率高 通信方式,使用Netty的NIO能提高效率 服务发现,使用zookeeper可以实现
二、几种重要的接口和类简介
1、List(有序、可重复) List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
2、Set(无序、不能重复) Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
3、Map(键值对、键唯一、值不唯一) Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
5.ArrayList和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以索引数据快,插入数据慢,Vector由于使用了(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快。
6.arraylist和linkedlist 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
HashMap与TreeMap 1、 HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序
7.mycat是怎样实现分库分表的?
mycat里面通过定义路由规则来(路由规则里面会定义分片字段,以及分片算法)。
8.主从复制机制的原理概述是怎样的?常见的存在形式有哪些?
答:mysql主从复制是master将所有的事务操作写入到binlog,slave获取binlog读入自己的中继区,然后再进行执行。
9.分库分表中解释一下垂直和水平2种不同的拆分?
答:垂直拆分:是将单表,或者是有关联的表放在一个数据库,把原有的一个数据库拆分成若干个数据库。 水平拆分:是将一个很大的表,通过取模,按照日期范围等等拆分成若干个小表
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间
三、基础部分:
- 基本数据类型的大小,以及他们的封装类。
byte(Byte) 1 ,short(Short) 2 ,int(Integer) 4 ,long(Long) 8 ,float(Float) 4 ,double(Double) 8,boolean(Boolean),char(Character)
- Switch能否用string做参数?
switch语句中的变量类型可以使byte,short,int,char。从jdk1.7后可以使用String类型,是通过switch中的String.hashcode将String转换成int进行判断的。
- equals与==的区别。
==操作符是用来比较两个变量的值是否相等,即就是比较变量在内存中的存储地址是否相同,equals()方法时String类从Object类中继承的,被用来检测两个对象的内容是否相同。
- Object有哪些公用方法?
clone() 克隆此对象的副本
equals()判断
getclass()返回object的运行类
hashcode()返回对象的哈希码值
notify()唤醒正在等待对象监听器的单个进程
notifyAll()唤醒正在等待对象监听器的所有进程
wait()导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。
toString()返回此对象的字符串表示形式
finalize()当垃圾收集确定不需要该对象时,垃圾回收器调用该方法
5.静态变量和实例变量的区别
静态变量前要加上关键字static,实例变量则不会。静态变量不需要创建任何的对象就可以直接使用,而实例变量需要先创建实例对象才能被使用。
6.Overload和Override的区别:
重载Overload表示的是同一个类中可以有多个相同名称的方法,但这些方法的参数列表不同
重写Override表示子类中的方法可以与父类中的方法名称和参数完全相同,即就是子类中的该方法将父类的该方法覆盖了
7.抽象类和接口的区别
抽象类可以有默认的方法进行实现,可以有构造器,可以有main方法进行运行,可以直接在该类中添加实现的方法
接口没有默认的方法进行实现,没有构造器,不可以使用main方法进行运行,在接口中添加方法时需要在具体实现的类中添加方法。
8.Java中final、finally和finalize的区别、
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。
9.创建线程池的4种方式。
1、newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作。如果这个唯一的线程因为异常结束,就会有一个新的线程来代替它
2、newFixedThreadPool:创建一个固定大小的线程池。
3、newCacheThreadPool:创建一个可缓存的线程池。
4、newScheduledThreadPool:创建一个大小不限的线程池
10。wait方法和sleep方法的区别。
sleep是线程类Thread的方法,wait是Object类的方法