谈一下你对 SpringMVC 框架的理解SpringMVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web框架,通过把 Model,View,Controller 分离,将 web 层进行职责解耦,把复杂的 web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
在我看来,SpringMVC 就是将我们原来开发在 servlet 中的代码拆分了,一部分由SpringMVC 完成,一部分由我们自己完成
SpringMVC 主要组件
前端控制器 DispatcherServlet :接收请求、响应结果,相当于转发器,有了Dispat...
Spring的两大核心是什么?谈一谈你对IOC的理解? 谈一谈你对DI的理解?谈一谈你对 AOP 的理解?Spring 的两大核心是:IOC(控制反转)和 AOP(面向切面编程) DI(依赖注入)IOC 的意思是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权和时机是由程序员自己把控的,而现在这种权力转移到 Spring 容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。最直观的表达就是,IOC 让对象的创建不用去 new 了,可以由 spring 根据我们提供的配置文件自动生产,我们需要对象的时候,直接从 Sprin...
谈一谈你对 Mybatis 框架的理解MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
在 mybatis 中,${} 和 #{} 的区别是什么?
#{} 是占位符,预编译处理,${}是字符串替换。
Mybatis 在处理#{}时,会将 sql 中的#{...
连接查询
左连接-(左外连接)以左表为基准进行查询,左表数据会全部显示出来,右表 如果和左表匹配 的数据则显示相应字段的数据,如果不匹配,则显示为 NULL;
右连接-(右外连接)以右表为基准进行查询,右表数据会全部显示出来,右表 如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为 NULL;
聚合函数SQL 中提供的聚合函数可以用来统计、求和、求最值等等。
COUNT:统计行数量
SUM:获取单个列的合计值
AVG:获取某个列的平均值
MAX:获取列的最大值
MIN:获取列的最小值
SQL 关键字
分页-MySQL 的分页关键词 limitSELECT * FROM ...
TCP 与 UDP 区别?TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于 IP 的传输层协议。
UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是 OSI 参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
TCP 和 UDP 都是来自于传输层的协议。传输层位于应用层和网络层之间,负责位于不同主机中进程之间的通信。
TCP 基于连接 UDP 无连接
TCP 要求系统资源较多,UDP 较少
TCP 保证数据正确性,UDP 可能丢...
JDK1.8 JVM 运行时内存
程序计数器:线程私有的(每个线程都有一个自己的程序计数器), 是一个指针. 代码运行, 执行命令. 而每个命令都是有行号的,会使用程序计数器来记录命令执行到多少行了.记录代码执行的位置
Java 虚拟机栈:线程私有的(每个线程都有一个自己的 Java 虚拟机栈). 一个方法运行, 就会给这个方法创建一个栈帧, 栈帧入栈执行代码, 执行完毕之后出栈(弹栈)存引用变量,基本数据类型
本地方法栈:线程私有的(每个线程都有一个自己的本地方法栈), 和 Java 虚拟机栈类似, Java 虚拟机栈加载的是普通方法,本地方法加载的是 native 修饰的方法.nat...
什么是线程?线程和进程的区别?线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的可以独立运行的基本单位。
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单元相互独立,线程之间 内存共享,这使多线程编程可以拥有更好的性能和用户体验。
创建线程有几种方式
继承 Thread 类并重写 run 方法创建线程,实现简单但不可以继承其他类
实现 Runnable 接口并重写 run 方法。避免了单继承局限性,编程更加灵活,实现解耦。
实现 ...
常见的数据结构常用的数据结构有:数组,栈,队列,链表,树,散列,堆,图等
数组是最常用的数据结构,数组的特点是长度固定,数组的大小固定后就无法扩容了 ,数组只能存储一种类型的数据 ,添加,删除的操作慢,因为要移动其他的元素。
栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,...
Java8大基本类型和包装类byte、short、int、long、float、double、boolean、charByte Short Integer Long Float Double Boolean Character
面向对象的特征:封装、继承、多态、抽象。封装:就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开,别人只能用我提供的功能实现需求,而不知道是如何实现的。增加安全性。
继承:子类继承父类的数据属性和行为,并能根据自己的需求扩展出新的行为,提高了代码的复用性。
多态:...
先言
不要听信你看到的关于优化的“绝对真理”,而应该是在实际的业务场景下通过测试来验证你关于执行计划以及响应时间的假设。
具体业务场景的不同,使用的MySQL服务版本不同,都会使得优化方案的制定也不同。
数据库任何操作都需要慎之又慎,即使所谓优化,也需要尽可能组织涉及到的所有业务部门具体商议,非常有可能,对你的业务来说是优化,却会影响他人业务!
切记,你需要清楚的知道,你的操作所带来的一切结果,测试环境不等于生产环境,风险操作,备份先行。
优化有风险,涉足需谨慎!
优化可能带来的问题
优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统!
优化手段有很大的风险,一定要意识到...