1. SpringMVC和 SpringBooot Spring区别
1.SpringBoot 简化开发 约定大于配置 Javaweb框架
开箱即用,远离繁琐的配置,删除了繁琐的xml配置文件;
内嵌Tomcat容器,项目可独立运行;
核心注解SpringBootApplication 包括 三个注解
ComponentScan用于类或接口上主要是指定扫描路径 组件扫描
Configuration 配置类
EnableAutoConfiguration注解打开自动配置功能。
2. 怎么运行 运行方式 main 方法
3. SpringBoot 需要独立的容器运行吗 可以 内置tomcat tomcat容器
4.SpringBoot 热部署
1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动
2.使用springloaded本地加载启动,配置jvm参数
- javaagent:<jar包地址> -noverify
3.使用devtools工具包,操作简单,但是每次需要重新部署
2.SpringMVC原理
3. Spring IOC AOP
1. IOC(控制反转) 、DI(依赖注入)
传统的Java开发模式中,当需要一个对象时,我们会自己使用new或者间接调用构造方法创建一个对象。而在spring开发模式中,spring容器使用了工厂模式为我们创建了所需要的对象,
不需要我们自己创建了,直接调用spring提供的对象就可以了,这是控制反转的思想;
2. DI(依赖注入) spring使用javaBean对象的set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想;
3. AOP面向切面编程中,我们将分散在各处的相同业务集中管理的编程方式横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想,
4. JDK和 JVM JRE的区别
JDK 开发工具包
JDK 1.8之后,如果链表的长度超过或者等于了阈值(7)的时候会自动转成红黑树,性能进一步提高了
工具包 包括 jdk给程序员提供的辅助工具都存放在bin目录下
jps(JVM Process Status Tool):显示指定系统内所有的虚拟机进程
jstat(JVM Statistics Monitoring Tool):用于收集虚拟机各方面的运行数据
jinfo(Configuration Info forJava):显示虚拟机配置信息
jmap(Memory Map for Java):生成虚拟机的内存转储快照(heapdump文件)
jhat(JVM Heap Dump Browser):用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
jstack(Stack Trace forJava):显示虚拟机的线程快照
javac是用来编译.java文件的。将.java源文件编译为.class文件。
java运行一个.class或者.jar文件,产生运行效果。
javadoc:根据Java源代码及其说明语句生成的HTML文档。
jdb: Java调试器,可以逐行地执行程序、设置断点和检查变量
jar: 多用途的存档及压缩工具,是个java应用程序,可将多个文件合并为单个JAR归档文件
JRE 运行环境 = JVM 虚拟机 + 所需类库
JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
5. Linux系统
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
6.Unix和Linux有什么区别?
Linux和Unix都是功能强大的操作系统,都是应用广泛的服务器操作系统
1.开源性
Linux是一款开源操作系统,不需要付费,即可使用;Unix是一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用。
2.跨平台性
Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix操作系统跨平台性能较弱,大多需与硬件配套使用。
3.可视化界面
Linux除了进行命令行操作,还有窗体管理系统;Unix只是命令行下的系统。
4.硬件环境
Linux操作系统对硬件的要求较低,安装方法更易掌握;Unix对硬件要求比较苛刻,按照难度较大。
5.用户群体
Linux的用户群体很广泛,个人和企业均可使用;Unix的用户群体比较窄,多是安全性要求高的大型企业使用,如银行、电信部门等,或者Unix硬件厂商使用,如Sun等。
6.相比于Unix操作系统,Linux操作系统更受广大计算机爱好者的喜爱,主要原因是Linux操作系统具有Unix操作系统的全部功能,并且能够在普通PC计算机上实现全部的Unix特性,开源免费的特性,更容易普及使用!
7. 前端 vue
Vue是一套用于构建用户界面的渐进式JavaScript框架
与传统JS和JQuery框架不同,Vue的渐进式框架表示开发者可以由简单组件写起,渐渐搭建出一个复杂的前端平台。
形成Vue渐进式框架的核心概念为:组件化,MVVM,响应式,和生命周期
优点
1. 轻量级
Vue作为一款轻量级前端框架,大小只有18–21KB,工程搭建简单,只需要几行命令符。因为Vue使用的主体语言为JS,开发者可以灵活地将其他框架(如React和Angular)的项目迁移到Vue,具有很高的集成能力。Vue提供的router路由可以便捷地搭建一个多界面应用。
2. 高性能
虚拟DOM和响应式避免了不必要的全局重新渲染,提升了用户体验,使用户操作更加流畅。
3. 好上手
与面向对象编程性质类似,组件化更符合人类思维。打个比方,我们在设计网页时,通常会把一个界面分成一块一块的、用于某功能的特定样式模块。Vue的组件化使前端开发更加容易理解,同时MVVM可以更便捷地实现交互,对新手十分友好。
4. 插件化
由于Vue框架的流行性,目前有许多基于Vue的npm扩展包和开发工具(如Vuex)。Vue可以在一个文件下统一管理所有外部插件的全局使用。
5. 便于测试
8. cookie、session和token会话
1. cookie数据存放在客户的浏览器上,session数据放在服务器上;
2. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie;
3. token并不矛盾,作为身份认证token安全性比Session好,因为每个请求都有签名还能防止监听以及重放攻击,而Session就必须靠链路层来保障通讯安全了。
9. redis 非关系型数据库 对象存储,通过对象的自身属性来决定
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。 默认端口 6379
Redis支持五种数据类型:String(字符串),hash(哈希),list(集合),set(无序集合)及 zset(sorted set有序集合
10. MySQL Oracle 数据库
关系型数据库:将数据存储在表中的数据库,以二维表为数据结构。表和字段类型之间的关系需要明确定义,以SQL语句为操作指令,也称为SQL数据库。
mysql和oracle宏观上的区别:mysql与oracle都是关系型数据库 mysql开源免费的,而oracle则是收费的,并且价格非常高
mysql的安装卸载很简单,oracle很麻烦,安装所用的空间差别也是很大的
11.JVM 面试题
1. java是跨平台语言
这个跨平台是中间语言(JVM)实现的跨平台
java有JVM从软件层面屏蔽了底层硬件、指令层面的细节让他兼容各种系统
2. 为什么要学习Jvm,学习Jvm可以干什么
首先先想:为什么Java可以霸占企业级开发那么多年 因为:不用考虑内存管理
3. JVM运行时数据区
4. JVM的常用调优参数有哪些?
-Xms2g:初始化推大小为 2g;
-Xmx2g:堆最大内存为 2g;
-XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4;
-XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2;
–XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合;
-XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合;
-XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器组合;
-XX:+PrintGC:开启打印 gc 信息;
-XX:+PrintGCDetails:打印 gc 详细信息。
12.maven
1. Maven是一个项目管理的工具,可以对项目进行构建、依赖的管理。
2.Maven项目对象模型(POM)是一个项目管理工具软件,可以通过简短的中央信息描述来管理项目的搭建,报告和文档等步骤。
13.什么是微服务
1. 微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
2. 微服务架构的特点:
- 针对特定服务发布,影响小,风险小,成本低
- 频繁发布版本,快速交付需求
- 低成本扩容,弹性伸缩,适应云环境
14. MVC
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
15. set无序不重复 怎么判断元素不重复
1. HashSet集合每次添加元素的时候,会自动提取两个对象。
然后让两个对象调用自己的hashCode()方法(继承自Object)得到彼此的哈希值(所谓的内存地址)
然后判断两个对象的哈希值是否一样,如果不一样认为两个对象不重复,都保留。
如果两个对象的哈希值一样,Set集合会继续让两个对象进行equlas比较,
如果equlas比较结果不一样,则认为两个对象不重复,都保留。
如果equlas比较结果一样,则认为两个对象重复,保留一个。
2 TreeSet子类是利用Comparable接口来实现重复元素的判断,
16. get post 请求
1.get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
post请求一般是去提交数据。
2.get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,
不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
post请求是没有的长度限制,请求数据是放在body中;
3.get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。
4.get请求可以被缓存,post请求不会被缓存。
5.get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是 url中,但post不能。它的参数不在url中。
6.get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。
17.svn git
1. SVN 是集中式版本控制工具 (版本记录都在中央服务器 (一旦中央服务器数据出错, 就可能导致所有版本记录都丢失)); Git 是分布式版本控制工具 (本地有完整的版本记录, 在本地就可以进行版本控制)
2. GIT把内容按元数据方式存储,而SVN是按文件
3. GIT没有一个全局的版本号,而SVN有
目前为止这是跟SVN相比GIT缺少的最大的一个特征。
4. GIT的内容完整性要优于SVN:
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
5. Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,SVN却需要联网;
6. SVN在Commit前,我们都建议是先Update一下,跟本地的代码编译没问题,并确保开发的功能正常后再提交,这样其实挺麻烦的,有好几次同事没有先Updata,就Commit了,发生了一些错误,耽误了大家时间,Git可能这种情况会少些。
18. SpringBoot和SpringCloud区别
SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系;
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架;