java面试

1.数据库就是用来存储、管理数据的仓库
2.什么是关系型数据库,其实就是以二维表的形式保存、管理数据的数据库
3.where和having的区别
where和having都是用于筛选过滤,其区别在于:
(1)where是在分组之前进行筛序过滤
(2)having是在分组之后进行筛选过滤
(3)where中不能使用列别名和多行函数(count,max,min,sum,avg)
(4)having可以使用列别名和多行函数
4.JDBC(Java DataBase Connectivity): java数据库连接
其实就是用于连接并访问数据库的一门技术(就是对数据库进行增删改查等操作)
5.JDBC快速入门细节
1、注册数据库驱动,2、获取连接之数据库URL,3、Statement传输器对象,
4、ResultSet结果集对象,5、释放资源
6.CSS: 层叠样式表, 是用于美化、渲染网页的一门语言。
7. CSS选择器:1元素名、标签名选择器,2类(class)选择器 3.id选择器 4.后代选择器 5.属性选择器
8.JS优势:良好的交互性,一定的安全性(只能访问浏览器内部的东西),跨平台性(基于浏览 器实现跨平台)
9.JS基本数据类型:1、数值类型(number),2、字符串类型(string),
3、布尔类型(boolean)4、undefined,5、null
10.jQuery的优势(了解)
(1)可以极大的简化JS代码
(2)可以像CSS选择器一样获取元素
(3)可以通过操作css样式控制页面的效果
(4)可以兼容常用的浏览器
11.GET提交和POST提交的区别?
(1)GET提交会将发送给服务器的请求参数,拼接在地址栏URL地址的后面,相对不安全!
(2)GET提交通过地址栏URL地址后面拼接参数,数据量不能太大,不能超过1kb或者4kb。
(3)POST提交是通过请求实体发送数据给服务器,相对更加安全!
(4)POST提交通过请求实体发数据,理论上数据量是没有限制的!
12. 运行在服务器中的Servlet程序的作用: 处理请求。
(1)浏览器负责向服务器发送请求,服务器接收请求并调用某一个Servlet程序
(2)Servlet程序对请求进行处理
(3)如果需要访问数据库,则由Servlet连接并访问数据,完成对数据的增删改查操作
(4)将请求处理的结果交给一个JSP或者直接返回一个html。(JSP也会在服务器端执行, 最终返回的也是一个html)
(5)将html响应给浏览器,浏览器负责解析并显示。
13. request和response介绍
当浏览器请求服务器,服务器接收请求后,以及在调用Servlet的service方法处理请求之 前,会创建代表Http请求的request对象和创建代表Http响应的response对象。
通过request对象可以获取请求相关的信息。
通过response对象可以向浏览器发送数据。
在request对象中保存了一个map集合,可以往集合中存入一些数据,再将请求转发到另外一个资源之后,还可以通过request将之前存入的数据再取出来。这就是通过域对象带数据到目的地,request就是一个域对象
14.request请求转发的特点:
(1)请求转发是一次请求,一次响应
(2)请求转发前后,地址栏地址不会发生变化
(3)请求转发前后,request对象是同一个(域对象)
(4)进行转发的两个资源必须属于同一个Web应用(属于不同web应用的资源之间是不能进行 转发的)
15.response对象实现重定向 重定向也是一种资源的跳转方式
重定向的特点:
(1)重定向是两次请求,两次响应
(2)重定向前后,地址栏地址会发生变化
(3)重定向前后,request对象不是同一个(不能使用域对象)
(4)进行重定向的两个资源可以不是同一个Web应用(属于不同web应用的资源之间是可以进 行重定向的)
16.Maven是一个项目管理工具,使用Maven可以来管理企业级的Java项目开发及依赖的管 理。使用Maven开发,可以简化项目配置,统一项目结构,提高大型团队的开发效率,降 低项目的维护成本,
17.会话: 从打开浏览器访问服务器开始,一直到访问服务器结束,浏览器关闭为止,这期间产生的多次请求和响应加在一起,就称之为浏览器和服务器之间的一次会话。
18.Cookie和session的区别
Cookie的特点
1、cookie是将会话中产生的数据保存在浏览器客户端, 是客户端技术
2、cookie是将数据保存在客户端浏览器, 容易随着用户的操作导致cookie丢失或者被窃取, 因此cookie中保存的数据不太稳定, 也不太安全。
但是cookie将数据保存在客户端,对服务器端没有太多影响,可以将数据保存很长时间。因此cookie中适合保存对安全性要求不高, 但是需要长时间保存的数据。
3、浏览器对cookie的大小和个数都有限制,一般推荐每一个站点给浏览器发送的cookie数量不超过20个,每一个cookie的大小不超过1kb。
Cookie的应用:实现购物车、记住用户名、显示上次访问的时间、地点
Session的特点
1、session是将会话中产生的数据保存在服务器端,是服务器端技术
2、session将数据存在服务器端的session对象中,相对更加的安全,而且更加稳定。不容易随着用户的操作而导致session中的数据丢失或者是被窃取。
但session保存数据的时间较短(因为session默认超过30分钟没有访问就是超时销毁。),因此session中适合存储对安全性要求较高,但是不需要长时间保存的数据。
Session的应用:保存登录状态
19.数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
20.事务的四大特性:(1)原子性,(2)一致性,(3)隔离性,(4)持久性
21.事务并发读问题:
(1)脏读(dirty read):读到另一个事务的未提交更新数据
(2)不可重复读(unrepeatable read):对同一记录的两次读取不一致,因为另一事务对该记录做了修改(是针对修改操作)
(3)幻读(虚读)(phantom read):对同一张表的两次查询不一致,因为另一事务插入了一条记录(是针对插入或删除操作);
22.事务隔离级别:
1、READ UNCOMMITTED(读未提交数据)
2、READ COMMITTED(读已提交数据)
3、REPEATABLE READ(可重复读)
4、SERIALIZABLE(串行化)
23.Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。

24.MyBatis架构图:
(1)mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
(2)基于SqlSessionFactory可以生成SqlSession对象
(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4)Executor是SqlSession底层的对象,用于执行SQL语句
(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
mybatis的原理:(将jdbc操作数据库的过程进行了封装)
系统底层会读取mybatis-config.xml核心配置文件,并通过SqlSessionFactoryBuilder构建出SqlSessionFactory工厂,工厂又会生成SqlSession对象,SqlSession对象又会调用底层的Executor对象执行SQL语句,调用底层的MapperStatement对象接收SQL语句的参数并将查询结果输出.
25.使用mybatis框架访问数据库:
(1)Mybatis对JDBC对了封装,可以简化JDBC代码;
(2)Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;
(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。
(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。
26.Spring框架
1、Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,降低开发者的开发难度;
2、Spring提供的IoC和AOP应用,可以将组件的耦合度降至最低(即解耦),便于系统日后的维护和升级;
3、Spring为系统提供了一个整体的解决方案,开发者可以利用它本身提供的功能外,也可以与第三方框架和技术整合应用,可以自由选择采用哪种技术进行开发。
27.为什么要使用Spring?
1).方便解耦,简化开发
通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
2).AOP编程的支持
通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测、事务管理、日志记录等。
3).声明式事务的支持
4).方便集成各种优秀框架
5).降低Java EE API的使用难度,如对JDBC,JavaMail,远程调用等提供了简便封装
28.spring架构
Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,
1.核心容器Spring Core 核心容器,提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。
2.Spring Context Spring上下文,是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
3.Spring AOP 通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。可以很容易地使 Spring框架管理的任何对象支持AOP。Spring AOP模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,就可以将声明性事务管理集成到应用程序中。
4.Spring DAO JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
5.Spring ORM Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
6.Spring Web Web上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以Spring 框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
7.Spring MVC框架 MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
29.IOC(Inversion of Control),控制反转。
所谓的控制反转,就是指将对象的创建,存储(map),管理(依赖查找,依赖注入)交给了spring容器。spring容器是spring中的一个核心模块,
在此之前,当需要对象时,通常是利用new关键字创建一个对象:但由于new对象,会提高代码之间耦合性.而使用spring框架,对象的创建可以交给spring来做,只需要将类提前配置在spring配置文件中,就可以将对象的创建交给spring容器,当需要对象时,不需要自己创建,而是直接通过spring获取即可,省去了new对象,可以降低代码之间的耦合性。
之前我们自己new对象,例如:User u = new User();而现在,变成由一个初始化的xml配置文件来创建,也就是由spring容器来创建。Hello hello = (Hello) ac.getBean(“hello”);当程序运行,spring开始工作后,会加载整个xml核心配置文件,读取到,获取到class属性中类的全路径,利用反射创建该类的对象。
30.Bean对象的单例和多例
在Spring容器中管理的Bean对象的作用域,可以通过scope属性或用相关注解指定其作用域。最常用是singleton(单例)或prototype(多例)。
31.DI(Dependency Injection)依赖注入 。
依赖注入,即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。简单来说,所谓的依赖注入其实就是,在创建对象的同时或之后,如何给对象的属性赋值。
32.SpringMVC简介
Springmvc是spring框架的一个模块,spring和springmvc无需中间整合层整合,Springmvc是一个基于mvc的web框架
spring的核心:IOC(控制反转)和AOP(面向切面编程),所谓的控制反转,就是指将对象的创建/存储/管理交给了spring容器。(依赖注入就是由spring容器动态地为具有依赖关系的对象的属性赋值)
33.spring mvc执行原理
(1).用户发送请求至前端控制器(DispatcherServlet);
(2).前端控制器(DispatcherServlet)收到请求后调用处理器映射器(HandlerMapping),处理器映射器(HandlerMapping)找到具体的Controller,并将Controller返回给前端控制器(DispatcherServlet);
(3).前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。处理器适配器经过适配调用具体的Controller;
Controller执行完成后返回ModelAndView,处理器适配器(HandlerAdapter)将controller执行的结果(ModelAndView)返回给前端控制器(DispatcherServlet);
(4).前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图解析器(ViewReslover),视图解析器(ViewReslover)根据View(逻辑视图名)解析后返回具体JSP页面。
(5).前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型数据填充至视图中);前端控制器(DispatcherServlet)将填充了数据的网页响应给用户。
34.MVC设计模式是一种通用的软件编程思想
在MVC设计模式中认为, 任何软件都可以分为三部分组成:
(1)控制程序流转的控制器(Controller)
(2)封装数据处理数据的模型(Model)
(3)负责展示数据的视图(view)
35.八大数据结构:数组、栈、队列、链表、树、散列表、堆、图。
36.Java提供8中基本类型
1)boolean布尔,1个字节; 2)char字符,2个字节; 3)byte字节,1个字节(8bit位);
4)short短整形,2个字节; 5)int整形,4个字节; 6)long长整型,8个字节;
7)float 单精度浮点,4个字节; 8)double双精度浮点,8个字节
37.装箱拆箱
装箱:将基本数据类型封装为包装类对象; 拆箱:将包装类中包装的基本数据类型数据取出
38.异常两种处理方式
 throws 抛出异常,自己不处理
 try-catch 自己处理异常
39. break、continue、return
break是跳出循环
 continue是跳过此次循环,执行下一次运行
 return直接返回调用的main函数,后面的代码都不执行,所以不执行打印“执行完成”的语句
40.栈与堆
栈是由操作系统自动分配和释放的内存,主要存放局部变量/基本数据类型/对象的引用地址等.
堆是由开发人员分配和释放的内存,主要存放new出来的对象,引用数据类型分配在堆内存,
41.java能跨平台
javac编译*.java文件为字节码文件,然后在指定的操作系统上,加载字节码文件。JVM虚拟机会把字节码文件再次编译成对应硬件服务器上的指令集,这样就完美的解决了跨平台的特性。
42.栈内存溢出:每一个用户请求都会产生一个线程来处理,线程太多导致内存不够用,就会发生栈内存溢出.
栈溢出:线程请求的栈深度超过了虚拟机所允许的最大深度,会发生栈溢出,递归/死循环
内存溢出:申请内存时,没有足够的内存供其使用.
内存泄漏:申请内存后,无法释放已申请的内存空间
43.jvm内存结构: 线程隔离区:虚拟机栈/本地方法栈/程序计数器/;线程共享区: 方法区/堆
堆:新生代(1/3堆空间)和老年代(2/3堆空间)
新生代:伊甸区(8/10新生代) 幸存区from (1/10新生代) 幸存区to (1/10新生代)
44.JVM加载class文件的原理:主要分为JVM对类的加载/连接(验证/准备和解析)和初始化.准备是为静态变量分配内存并设置初始值,解析是将符号引用替换为直接引用.类的加载是由类加载器完成的,包括启动类加载器/扩展类加载器/应用程序类加载器/用户自定义类加载器.执行双亲委派机制.
类的加载过程: JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤
1) 装载:查找并加载类的二进制数据;
2)链接:
验证:确保被加载类的正确性;
准备:为类的静态变量分配内存,并将其初始化为默认值;
解析:把类中的符号引用转换为直接引用;
3)初始化:为类的静态变量赋予正确的初始值;
45.JVM调优:借助于Visual GC插件,设置-Xms(堆内存初始化大小)和-Xmx(最大堆内存)/-Xmn(设置新生代容量)/-XX:SurvivorRatio(伊甸区与幸存区的比例,默认为8)/-XX:UseG1GC(收集器的类型G1)等参数,通过调整新生代/老年代的大小和GC收集器的类型,增加伊甸区大小,减少YGC的次数,来进行调优.jvm调优:调整java虚拟机的参数,
46.反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
47.sql语句的优化:
1.在 where 子句中尽量少用in和not in
2.不用 selectfrom table,用具体的字段列表替换""
3.尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
4.like语句中,除非必要,否则不要在关键词前加%
5.尽量避免在 where 子句中使用!=或<>操作符
6.在 where 子句中尽量将or 转换为 union all
7.尽量避免在 where 子句中对字段进行 null 值判断
8.尽量避免在 where 子句中对字段进行表达式操作
48.java的三大特征:封装、继承、多态
1) 封装(encapsulation):将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系。
2) 继承(inheritance):子类继承父类,父类的方法就可以直接拿过来用,而无需再次实现,private私有、构造方法、final等除外。
3) 多态(polymorphism):父类引用指向子类对象,通过子类的方法重写,父类对象在向下转型中,不同子类可能会表现出不同的行为。
49.一个任务通常就是一个程序,每个运行中的程序就是一个进程(Process)。
50.NIO:
NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件。因此,单个线程可以监听多个数据通道。NIO:同步非阻塞;BIO:同步阻塞;AIO:异步非阻塞。
51.对象数组ArrayList
 内部用数组存放数据,封装了数组的繁琐操作,初始长度是0,第一次添加数据,默认长度是10,1.5倍增长
效率:访问任意位置效率高,添加或删除数据,效率可能降低
52.链表LinkedList
效率:两端效率高
53.List集合和Set集合的区别
 List是一个有序的集合(元素存与取的顺序相同),它可以存储重复的元素
 Set是一个无序的集合(元素存与取的顺序可能不同),它不能存储重复的元素
54.键值对HashMap:内部存储结构:,内部使用Entry[]数组来存放数据,数组初始容量默认是 16,扩容: 翻倍扩容,负载因子loader factor 0.75
55.线程(thread)是操作系统能够进行运算调度的最小单位。
56.创建多线程的四种方式
继承Thread 实现Runnable
两个工具辅助创建线程,控制线程的执行:线程池 、Callable/Future
57.悲观锁和乐观锁
 悲观锁:还是像它的名字一样,对于并发间操作产生的线程安全问题持悲观状态,悲观锁认为竞争总是会发生,因此每次对某资源进行操作时,都会持有一个独占的锁,就像synchronized,不管三七二十一,直接上了锁就操作资源了。
 乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将比较-替换这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑
58.线程锁和ThreadLocal的区别
线程锁实现了线程的同步,线程排队按顺序执行。线程阻塞,前面没有执行完成,后面就只能等待,前面的执行完成,后面才能进行执行。
ThreadLocal通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。
59.Spring boot构建于Spring 框架基础之上,基于快速构建理念,提供了自动配置功能,可实现开箱即用特性,简化了整个项目的配置。其核心主要包括:起步依赖(Starter Dependency)。自动配置(Auto Configuration)。健康检查(Actator)。
60.Spring Boot 整合MyBatis
新建Spring Boot项目
pom.xml中引入依赖 (引入连接mysql的必要依赖,引入整合MyBatis的核心依赖)
在application.properties中配置mysql的连接配置
61.同步锁synchronized与lock的区别:synchronized会自动释放锁,lock必须手动释放锁;lock是一个接口,synchronized是一个关键字;Lock可以判断是否获取到锁,synchronized无法判断;Lock锁适合大量代码的同步问题,synchronized锁适合少量代码的同步问题。
62、重载和重写区别:方法的重载overload和重写override都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类重写方法与父类被重写方法有相同的返回类型。
63.Ajax 是一种Web应用技术,可以借助客户端脚本(javascript)与服务端应用进行异步通讯,获取服务端数据以后可以进行局部刷新。进而提高数据的响应和渲染速度。异步加载。
64.AOP就是在不改变原有系统核心业务代码的基础上动态添加一些扩展功能,
SpringAOP底层是基于动态代理机制实现的:如果目标对象实现接口,则底层采用JDK动态代理机制为目标对象创建代理对象;如果目标对象没有实现接口,则底层采用CGLIB动态代理机制为目标对象创建代理对象.切面=切入点(常用四个)+通知(五种通知)
前置通知(@Before)。返回通知(@AfterReturning)。异常通知(@AfterThrowing)。后置通知(@After)。环绕通知(@Around)
65.shrio的原理:
Shiro 架构包含三个主要的理念其中:
1) Subject :主体对象,负责提交用户认证和授权信息。
2) SecurityManager:安全管理器,负责认证,授权等业务实现。
3) Realm:领域对象,负责从数据层获取业务数据。
系统调用subject的相关方法将用户信息提交给SecurityManager;SecurityManager将认证/权限检测操作委托给认证管理器/授权管理器,子管理器再将用户信息传给Realm;Realm访问数据库获取用户信息并对信息封装返回;子管理器对Realm返回的信息进行判定.
Shiro框架进行权限管理时,要涉及到的一些核心对象,主要包括:认证管理对象,授权管理对象,会话管理对象,缓存管理对象,加密管理对象以及Realm管理对象
66.Spring Boot是构建所有基于Spring的应用程序的起点。Spring Boot旨在通过最少的Spring前期配置使您尽快启动并运行。
67.Spring中如何管理对象
1. Spring通过bean方式管理对象
2. Spring通过class类型利用反射机制实例化对象(无参构造方法)
3. Spring中维护了一个Map集合 Map<“studentController”,“对象”>关键信息:key不能重复. 类名不能重名.
4. 当程序启动时,首先加载tomcat服务器.之后通过tomcat服务器启动Spring容器.spring容器启动之后通过包扫描等方式.实例化对象.最终程序启动成功!!!
5. Spring容器生命周期由tomcat决定.对象的生命周期由容器决定
68.分布式
核心理念: 将业务系统,按照特定的规则进行拆分.
特点:
1. 分布式系统对外是统一的,对内是相互独立的.
2. 分布式解决了系统之间架构的耦合性问题
69.SpringMVC简单参数传递
1. 客户端发起请求,并且携带参数.
2. SpringMVC框架完成业务方法调用时,负责参数的动态的获取.
3. 利用Request对象的getParameter(“id”)实现了数据获取.
70.SpringMVC如何为对象赋值
1. 客户端发起请求,携带参数 ?id=1&name=tomcat
2. 当springMVC根据url执行方法时,需要先为参数赋值.
3. 首先根据Item对象的getXXXX()方法,动态的获取对象的属性名称.
4. 利用getParameter(“属性”)动态获取参数
5. 之后利用setXXXX()方法实现数据的赋值.最终完成了对象的数据封装.
71.反向代理技术
概念:基于http协议规则,代理服务器代替用户访问真实资源的过程.称之为代理.
反向代理:说明:客户端不需要了解真实的服务器信息.但是服务器端清楚是谁访问的 称之为反向代理过程.
正向代理: 微服务调用
说明:客户端一定了解真实的服务器信息.但是服务器无法获取真实的用户信息.(一般用户保护客户端信息)
72.Linux命令
3.2.1 cd命令集
ifconfig 检查IP地址
cd命令是linux中最基本的命令语句,必须熟练掌握
cd / 返回根目录
cd ~ 用户主目录
cd . 当前目录
cd …返回到上一级目录
cd /usr/ 进入到usr目录
cd – 返回上一个目录
cd 直接回家
3.2.2 ls目录和文件
ls –l 详细格式,文件权限,时间
ll 和ls –l作用相同
ls .txt 查看所有的txt类型文档
3.2.3 目录操作
mkdir 创建目录
mkdir a 创建 a目录
mkdir -p a/b 创建 a目录,并在a目录里创建b目录
mkdir -m 777 c 创建一个权限为777的C目录
rmdir 删除目录(如果目录里有文件,则不能用此命令)
3.2.4 Vi/vim创建/查看/编辑文件
命令行:Esc切换到命令行模式。
编辑模式:
按i,在光标前开始编辑
按a,在光标后开始编辑
按o,在当前行的下一行开始编辑
底行模式:按 shift+:冒号。
:q! 不保存退出
:wq 保存退出
:/world 从当前光标处,向上查找world关键字
:?world 从当前光标处,向后查找world关键字
3.2.5 删除文件
rm 删除文件
rm n.txt 提示y删除n放弃
rm –f n.txt 不提示
rm –rf dirname 不提示递归删除目录下所以内容
rm –rf * 删除所有文件
rm –rf /
删除所有子目录所有和文件
3.2.6 复制和移动文件
cp复制文件
cp nginx.conf n.txt
cp –R tomcat1 tomcat2 #复制整个目录
mv 修改文件名,移动文件
mv n.txt m.txt
3.2.7 浏览文件
cat 输出文件所有的内容
more 输出文档所有的内容,分页输出,空格浏览下一屏,q退出
less 用法和more相同,只是通过PgUp、PgOn键来控制
tail 用于显示文件后几号,使用频繁
tail -10 nginx.conf 查看nginx.conf的最后10行
tail –f nginx.conf 动态查看日志,方便查看日志新增的信息
ctrl+c 结束查看
3.2.8 打包命令
tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成name.tar.gz的文件。
-c 创建一个新的tar文件
-v 显示运行过程的信息
-f 指定文件名
-z 调用gzip压缩命令进行压缩
-t 查看压缩文件的内容
-x 解开tar文件
tar –cvf n.tar ./* 压缩当前目录下的所有文件和目录,文件名为n.tar
tar –xvf n.tar 解压压缩包中的文件到当前目录(如果长时间未解压成功 Ctrl+C推出)
tar –cvzf m.tar ./* 解压m.tar文件到当前目录
3.2.9 grep命令
grep root /etc/passwd 在文件中查找关键字root
grep root /etc/passwd –-color 高亮显示
grep root /etc/passwd –A5 –B5 高亮显示,A后5行,B前5行
grep -n root /etc/passwd 查找并显示行数
grep -v root /etc/passwd 取反,查出不含root的数据
查询全部服务命令 ps -ef | grep java*
73.redis是一个key-value存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
74.1. 启动redis redis-server redis.conf
2. 进入客户端 redis-cli -p 6379 退出客户端: ctrl+c /exit/quit
3. 关闭客户端 redis-cli -p 6379 shutdown
75.SpringBoot整合redis
1实现思路 说明:jedis对象的实例化,不能写死在java类中.应该将对象交给spring容器管理.实现解耦.
2编辑pro配置文件
3编辑配置类
76.Redis hash一致性算法
1. 确定节点node的位置
2. 对key进行计算hash计算,得到hashcode值.
3. 按照顺时针的方向,找到最近的redis的node节点.
4. 找到node节点,进行set操作.
77.Redis的AOF模式
1. AOF模式默认关闭,需要开启.
2. 开启了AOF模式之后,redis采用AOF模式.
3. AOF模式记录的是用户的操作过程.
4. AOF 模式可以实现数据的实时备份.
5. AOF的持久化文件空间占用量大.恢复数据的时间长.
1. 如果数据不允许丢失,则使用AOF.
2. 如果要求程序执行的效率最高,则使用RDB
3. 如果使用AOF模式需要定期整理持久化文件.
78.哨兵实现高可用
1. 当哨兵启动时,首先会监听主机.并且会记录当前主机的全部的状态信息(主从结构).
2. 哨兵会定期进行心跳检测,发送ping指令等待响应pong.如果连续3次没有得到响应结果.则开启推选机制.
3. 哨兵根据自己的选举原则,选择当前一台活跃的从机当做新的主机.
4. 其他的节点应该修改的配置文件(redis.conf).充当新主机的从机.
5. 同时需要配置超时时间,目的防止当主机生效时意外宕机,导致选举失败的情况.
79.Redis集群高可用推选原理
Redis的所有节点都会保存当前redis集群中的全部主从状态信息.并且每个节点都能够相互通信.当一个节点发生宕机现象.则集群中的其他节点通过PING-PONG检测机制检查Redis节点是否宕机.当有半数以上的节点认为宕机.则认为主节点宕机.同时由Redis剩余的主节点进入选举机制.投票选举链接宕机的主节点的从机.实现故障迁移.
80.Redis集群搭建
1.准备集群文件夹cluster, 在cluster文件夹中分别创建7000-7005文件夹
2.将redis根目录中的redis.conf文件复制到cluster/7000/ ,编辑配置文件
3.分别将7001-7005文件中的配置文件改为对应的端口号的名称
4.通过脚本编辑启动/关闭指令
5.创建redis集群,管理集群
81.SOA思想
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。
82.RPC是远程过程调用(Remote Procedure Call)的缩写形式。
远程过程的调用实质调用的"代理",感觉调用的是本地服务但是实际调用的是远程的服务器.代理内部封装了协议规范,调用者不需要了解底层.即可实现远程过程调用.
83.ZooKeeper是一个分布式应用程序协调服务,Zookeeper负责服务的协调调度.当客户端发起请求时,返回正确的服务器地址.
84.Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
85.单点登录实现步骤
1. 用户输入用户名和密码之后点击登录按钮发起url请求.
2. JT-WEB服务器接收用户的参数username/password(明文),将参数发给jt-sso系统实现业务处理.
3. JT-SSO系统RPC接收数据之后,链接数据库,实现数据的校验
4. 如果根据username和password查询到用户的数据.则开始单点登录的流程.
5.JT-SSO.将请求处理之后,返回ticket数据给jt-web服务器.
6.将数据通过客户端Cookie保存起来,设定过期时间.设置Cookie数据共享
7.当用户再次访问时,jt-web服务器根据ticket信息查询redis服务器.如果数据存在则回显数据,如果数据不存在则要求用户再次登录.
实现步骤:
当用户登陆时,通过nginx访问jt-web中任意的服务器之后输入用户名和密码访问JT-SSO单点登录服务器.
获取用户的登陆信息查询数据库,校验用户名和密码是否正确.如果用户名和密码是正确的,将用户信息转化为JSON串.之后生成加密的秘钥TOKEN(MD5(盐值+随机数)).将token:userJSON保存redis中.并且将token信息返回给客户端(jt-web).
Jt-web接收到服务端数据时首先校验数据是否有效.如果数据准确无误,将token信息写入到浏览器的Cookie(4K)中
当用户再次访问jt-web时,首先应该获取用户的Token信息,之后查询redis缓存服务器获取userJSON数据,之后将userJSON转化为User对象进行使用.实现免密登录.如果token数据为null,那么则让用户访问登陆页面.
86.消息队列
常见消息队列1. activeMQ apache提供的 2.RabbitMQ 爱立信研发 ACK 确认 3.RocketMQ 阿里
作用:消息队列主要的作用是缓解服务器压力. 特点:平峰削谷
87.微服务和分布式的联系及区别:分布式:分散压力。微服务:分散能力。
微服务 压力分摊 松耦合 单服务 压力集中 紧耦合
88.eureka 和 zookeeper 的区别
eureka AP - 可用性, 分区容错性 集群 - 对等结构
zookeeper CP - 一致性, 分区容错性 集群 - 主从结构
89.Spring Cloud
1.注册中心 eureka 或 zookeeper
2.ribbon 负载均衡 重试
3.hystrix 降级 熔断
4.hystrix dashboard 仪表盘, hystrix数据监控
5.turbine 聚合监控数据
6.feign 声明式客户端 集成ribbon 集成hystrix (不推荐)
7.zuul api 网关; 统一的调用入口; 集成ribbon默认启用负载均衡,重试不推荐; 集成hystrix 降级, 实现 FallbackProvider
8.config 配置中心, 集中管理维护配置文件;默认 git 存储; 也可以使用本地文件存储,或数据库存储
9.bus消息总线 用来做配置刷新;要结合消息中间件服务器
10. sleuth+zipkin 链路跟踪
90.Lucene Solr
全文检索引擎服务器
索引: 倒排索引
91.RabbitMQ 消息中间件(Broker), 消息队列 使用场景: 解耦, 流量削峰, 异步调用
简单模式 工作队列模式 发布订阅模式 路由模式 主题模式
92.Kubernetes - K8s
自动部署,启停,伸缩容器 缺点: 过于复杂
93.tomcat优化
1.jvm优化 2. 网络有4种bio,nio2,apr 3.设置线程池,默认线程池大小时200
94.mysql优化
1.创建索引,提高查询速度
2.使用内连接代替子查询
3.中间表
4.数据库集群
5.缓存
95.京淘项目人员分配
开发周期:开发4个月但是不停的更新迭代
购物车商品展现页面 商品规格
评价系统
订单物流系统 京东物流/调用菜鸟裹裹 调用第三方接口获取数据进行展现(http) SDK
支付系统:银行接口/第三方支付
推荐系统:….
秒杀系统.
大广告位实现.

产品经理:3人,确定需求以及给出产品原型图
项目经理:1人,项目管理。
前端团队:5人,根据产品经理给出的原型制作静态页面。
后端团队:20人,实现产品功能。
测试团队:5人,测试所有的功能。2人  3人 脚本 shell
运维团队:3人,项目的发布以及维护。
2.2	日活量/并发量
	日活量:2000万   内网系统
	并发量:1500-2300左右
	单点并发压力 18台tomcat服务器
	服务器划分
	Mysql							2
	Mycat服务器						1
	Solr							3
	Redis							3   6主 12从  18台
	图片服务器						2   FastDFS 分布式图片存储系统
	Nginx							2
	注册中心						3
	RabbitMQ						2
	18台服务器

	Jt-manage						5
	Jt-web							10
	Jt-sso							3
	Jt-cart							5
	Jt-order						5
	Jt-search						5
	33台tomcat

“==”与equals的区别
==,对于基本数据类型,直接进行比较,对于引用类型的对象,比较的是内存的首地址是否相同
equals,比较的是内存中存储的值是否相同。
原因:基本数据类型直接存储在栈中,引用类型存储在栈中,其存储地址存储在栈中

String,String Builder,String Buffer
String内容不可变,底层由字符数组实现,final char[]
String Builder内容可变,线程不安全
String Buffer内容可变,线程安全
string、stringbuffer、stringbuilder的区别:String 修饰的对象是不可变的,任何改变都会生成一个新的string对象;StringBuffer和stringbuilder是可变的,StringBuffer是线程安全的,StringBuilder不安全,但速度快于StringBuffer。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值