塘厦网站建设公司,做盗版网站 国外服务器,可以通过哪些网站注册域名,移动登录网页模板下载三次握手#xff0c;四次挥手中#xff0c;为什么要挥手四次
第一次握手#xff0c;客户端发送同步报文到服务端#xff0c;客户端知道自己有发送数据能力#xff0c;不知道服务端是否有发送、接受数据能力。
第二次握手#xff0c;服务端收到同步报文#xff0c;并回复…三次握手四次挥手中为什么要挥手四次
第一次握手客户端发送同步报文到服务端客户端知道自己有发送数据能力不知道服务端是否有发送、接受数据能力。
第二次握手服务端收到同步报文并回复确认同步报文此时服务端知道自己有接收、发送数据能力并且客服端有发送数据能力但不知道客户端是否有接收数据能力。
第三次握手当客户端收到确认同步报文后知道服务端具备发送、接收能力也知道自己具备但是服务端只知道客户端具备发送能力还不知道也有接收能力所以需要发送确认报文告诉服务端自己具备接收能力。
第一次挥手客户端发起关闭连接的请求给服务端
第二次挥手服务端收到关闭请求的时候可能这个时候数据还没发送完所以服务端会先回复一个确认报文表示自己知道客户端想要关闭连接了但需要等待数据传输完
第三次挥手当数据传输玩服务端会主动发送FIN报文告知客户端标识数据已发送万传给你服务端准备关闭连接了。
第四次挥手当客户端收到服务端的FIN报文后会回复ACK报文告知服务端自己知道了在等待一会就关闭连接。
为什么握手三次挥手却要四次因为服务端的SYN和ACK报文可以一起发送但是挥手时有数据传输ACK和FIN报文不能同时发送需要分为两步所以多了一步流程。就是挥手的第二次挥手时候没有发送 LinkedList和ArrayList的去重方法
第一种:通过LinkedHashSet来解决LinkedHashSet是有序不可重复的可以把ArrayList传入LinkedHashSet中 第二种使用Java8的新特性stream的distinct()方法来实现
第三种使用contains()方法去重
第四种: 利用HashSet(无序唯一)的特性 mysql事务的执行流程
开启事务记录回滚点并通知服务器将要执行一组操作要么同时成功、要么同时失败执行sql语句执行具体的一条或多条sql语句结束事务(提交|回滚) 提交没出现问题数据进行更新回滚出现问题数据恢复到开启事务时的状态对a,b,c三个字段建立联合索引那么查询时使用其中的2个作为查询条件是否还会走索引
根据查询字段的位置不同来决定如查询a, a,b a,b,c a,c 都可以走索引的其他条件的查询不能走索引。
组合索引 有“最左前缀”原则。就是只从最左面的开始组合并不是所有只要含有这三列存在的字段的查询都会用到该组合索引。 如何创建索引
写sql创建
sql范本create index 索引名称 on 表名(字段名);
sql示例create index index_user_name on PROMULGATE_CERT(user_name);
使用数据库工具创建
手动创建索引 造轮子还是用轮子
我认为用轮子更好因为程序员流传着一句话不要重复造轮子就是无意义的事情可以不做当然以后学了更多的技术后还是要专研更好的技术尝试造轮子像尤雨溪一样写出优秀的vue框架 mybatis的批量操作
1.foreach的主要用在构建in条件中它可以在SQL语句中进行迭代一个集合。foreach标签的属性主要有itemindexcollectionopenseparatorclose。
2.Mybatis内置的ExecutorType有3种默认为simple该模式下它为每个语句的执行创建一个新的预处理语句单条提交sql而batch模式重复使用已经预处理的语句并且批量执行所有更新语句显然batch性能将更优但batch模式也有自己的问题比如在Insert操作时在事务没有提交之前是没有办法获取到自增的id在某些情况下不符合业务的需求。
8.抽象类和接口的区别
1.抽象类允许包含某些方法的实现而接口是不允许的从设计级别看为了实现由抽象类定义的类型一个类必须定义为一个抽象类的子类这限制了它在类图中的层次但是接口没有这个层次的限制。
2.在抽象类中提供成员方法的实现细节该方法只能在接口中为 public abstract修饰也就是抽象方法。
3.抽象类中的成员变量可以实现多个权限 public private protected final等接口中只能用 public static final修饰。
9.介绍一下你最近做的一个的项目
10.
同一个事物多个人操作SSM整合SpringMVCSpringMVC框架位于Controller层主要为接收用户发起的请求在接收请求后可进行一定处理(如通过拦截器的信息验证处理)。在通过处理后SpringMVC会根据请求的路径将请求分发到对应的Controller类中的处理方法。处理方法再调用Service层的业务处理逻辑。
Spring框架Spring框架在SSM中充当类似与粘合剂的作用利用其对象托管的特性将SpringMVC、MyBatis两个独立的框架有机的结合起来。 Spring可将SpringMVC中的Controller类和MyBatis中的SqlSession类进行托管简化了人工管理过程。 Spring除了能对SpringMVC和MyBatis的核心类进行管理外还可对主要的业务处理的类进行管理。
MyBatis框架MyBatis框架应用于对数据库的操作其中主要功能类SqlSession可对数据库进行具体操作。
2.SSM框架中的容器管理
**SpringMVC容器**主要对Controller控制器对象视图等用户请求和请求结果进行管理。
**Spring容器**主要对Service、Dao、工具类等对象进行管理。
**两个容器的关系**SpringMVC容器为Spring容器的子容器进而两容器中的对象进行间接管理。 如何保证用户模块的数据安全
可以使用加密算法
对称加密算法
加密和解密使用相同的密钥。对称加密算法加密解密速度快但安全性较差常见的对称加密算法DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES
非对称加密算法
加密和解密使用不同的密钥也称为公私钥加密。非对称加密的缺点是加解密速度要远远慢于对称加密在某些极端情况下甚至能比非对称加密慢上1000倍。但安全性比对称加密算法高
常见的非对称加密算法RSA、ECC移动设备用、Diffie-Hellman、El Gamal、DSA数字签名用
hash算法
Hash算法特别的地方在于它是一种单向算法用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值却不能通过这个Hash值重新获得目标信息。Hash算法常用在不可还原的密码存储、信息完整性校验等
常见的Hash算法MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
加密算法会生成密钥token就是临时令牌也就是密钥Token是由字符串组成的是服务端生成的一串字符串以作客户端进行请求的一个令牌当第一次登录后服务器生成一个Token便将此Token返回给客户端以后客户端只需带上这个Token前来请求数据即可无需再次带上用户名和密码。token其实说的更通俗点可以叫暗号在一些数据传输之前要先进行暗号的核对不同的暗号被授权不同的数据操作。
jwt是token的一种实现方式它将用户信息加密到token里服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性只要正确即通过验证。
String的常用方法
1.求字符串长度 public int length()//返回该字符串的长度
2.求字符串某一位置字符public char charAt(int index)//返回字符串中指定位置的字符注意字符串中第一个字符索引是0最后一个是length()-1。
3.提取子串用String类的substring方法可以提取字符串中的子串该方法有两种常用参数:1)public String substring(int beginIndex)//该方法从beginIndex位置起从当前字符串中取出剩余的字符作为一个新的字符串返回。2)public String substring(int beginIndex, int endIndex)//该方法从beginIndex位置起从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回。
4.字符串比较1)public int compareTo(String anotherString)//该方法是对字符串内容按字典顺序进行大小比较通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数反之返回负整数相等返回0。2)public int compareToIgnore(String anotherString)//与compareTo方法相似但忽略大小写。3)public boolean equals(Object anotherObject)//比较当前字符串和参数字符串在两个字符串相等的时候返回true否则返回false。4)public boolean equalsIgnoreCase(String anotherString)//与equals方法相似但忽略大小写。
5.字符串连接public String concat(String str)//将参数中的字符串str连接到当前字符串的后面效果等价于。
6.indexOf索引
7.字符串中字符的大小写转换 1)public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串 2)public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串
8.字符串中字符的替换 1)public String replace(char oldChar, char newChar) //用字符newChar替换当前字符串中所有的oldChar字符并返回一个新的字符串。 Mysql百万级的数据迁移方案
小数据量可以使用mysqldump命令进行导入导出这种方式简单便捷。数据量较大且有足够的迁移耐心时可以选择自己写脚本选择合适的并行方案迁移数据这种方式编码成本较高。数据量较大且希望能在短时间内完成数据迁移时可以通过mysql导入导出文件的方式来迁移这种方式效率较高。
Spring MVC传递接收参数的几种方式
一、通过实体Bean接收请求参数bean对象
RequestMapping(/login)
public String login(User user, Model model) {
二、通过处理方法的形参接收请求参数单个属性
通过处理方法的参数接收请求参数就是将表单参数直接写入控制器类对应方法的参数中即参数名称与请求参数名称完全相同。 接收参数模式适用于GET和POST提交请求
RequestMapping(/login)
public String login(String name, String pwd, Model model) 通过HttpServletRequest接收请求参数
RequestMapping(/login)
public String login(HttpServletRequest request, Model model) {
通过PathVariable接收URL中的请求参数
RequestMapping(/login/{name}/{pwd})
public String login(PathVariable String name, PathVariable String pwd, Model model) {
通过RequestParam接收请求参数
RequestMapping(/login)
public String login(RequestParam String name, RequestParam String pwd, Model model) { 六、通过ModelAttribute接收请求参数
RequestMapping(/login)
public String login(ModelAttribute(user) User user, Model model) {
java单例模式之懒汉式与饿汉式
饿汉式线程安全在程序启动或单例模式类被加载的时候单例模式实例就已经被创建。
空间换时间
1.创建一个类 然后对类里面的构造器进行私有化 目的防止外面调用该类创建对象 无法实现单例
2.一开始先创建一个静态对象 目的这个对象就是单例
3.创建一个pubilc静态方法来返回对象,供外面调用该对象
懒汉式 当程序第一次访问单例模式实例时才进行创建。
时间换空间
1.创建一个类 并将构造器设置为私有的 目的防止外面的对象去调用 无法弄成单例模式
2.声明一个静态对象 但是没有初始化 等到要使用的时候再去初始化对象 避免占用内存空间
3.提供一个public static 方法供外面调用
区分饿汉式和懒汉式水饿汉式:坏处:对象加载时间过长。好处:饿汉式是线程安全的懒汉式:好处:延迟对象的创建。坏处:线程不安全---到多线程内容时再修改
IOC的注入方法
set方式注入
2.构造函数注入
3.注解注入
基本数据类型引用数据类型放在同一个对象使用是值还是地址
使用的是地址因为对象访问是访问地址地址相同就是同一个对象
为什么使用SpringBoot
1.遵循约定优于配置的原则 零配置无冗余代码生成
2.提供starter POM高效包管理 集成了大量常用的第三方库的配置
3.简化配置无需XML
4.内嵌servlet容器
5.与主流框架集成简单。Spring Boot 依赖 Spring 框架来管理对象的依赖spring框架是通过ioc机制来管理bean的
Redis的五大数据类型
1.string 2.hash 3.list 4.set 5.zset
HashMap的两种取值方式
Map的两种取值方式keySet、entrySetkeySet先获取所有键的集合 再根据键获取对应的值。即先找到丈夫去找妻子entrySet 先获取map中的键值关系封装成一个个的entry对象 存储到一个Set集合中再迭代这个Set集合 根据entry获取对应的key和value。 向集合中存储自定义对象 entry类似于是结婚证 HashMap : 内部结构是哈希表不是同步的。允许null作为键null作为值。TreeMap : 内部结构是二叉树不是同步的。可以对Map集合中的键进行排序。
Java中解决跨域的几种方法
使用注解 CrossOrigin,标注在controller类的方法上或者controller类上crosFIlterWebMvcConfigurerHashMap的put方法key值可以重复嘛
Key可以重复 value不能重复键和值可以为空
MyBatis怎么寻找SQL语句
获取映射文件xml
二、解析mapper文件并获取内容
三、得到SQL语句
四、对SQL语句的处理
spring,springboot,springmvc的关系和区别
Spring包含springmvcspringboot是在spring的基础上进行的扩展关系大概是springmvcspringspringboot,springboot对比spring的优点有1.提供嵌入式容器支持2.使用命令java-jar独立运行jar3.在外部容器中部署时可以选择排除依赖关系以避免潜在的jar冲突4.部署时灵活指定配置文件的选项5.用于集成测试的随机端口生成
Tomcat和Nginx和apache的关系和区别
nginx主要用于做静态内容服务和代理服务器直接将外来的请求转发给后面的应用服务器tomcat更像是一个应用容器Apache是一个同步多进程模型是可以一个连接对应一个进程而nginx属于异步的多个连接可以对应一个进程nginx轻量级抗并发处理静态文件好apache稳定性好对php支持比较简单nginx还需要配合其它后端进行使用处理动态请求上更有优势Apache由c语言实现支持各种特性和模块从而拓展核心功能tomcat是由java实现可以更好的支持servlet和jspapache也是普通的服务器本身只支持html静态网页不过可以通过插件来支持php等tomcat是servlet/jsp容器支持htmljspaspphpcgi等apache更侧重于http servertomcat侧重于servlet引擎
Java和JavaScript的区别
java是强类型语言使用变量时必须在程序中声明在java中编译会检查变量的类型。javascript是弱类型语言有更宽松的语法和规则数据类型不同java有八种数据类型是byteshortintlongfloatdoublebooleancharjavascript有三种数据类型是numberstringboolean执行环境不同java在jvm或web浏览器中运行执行时会使用更多内存javascript仅在浏览器上运行运行时只需要很少的内存定位不同java是一种面向对象的oop编程语言要设计对象JavaScript是基于对象的oop脚本语言他为开发者提供了很多自带的内部对象更为简单省时联编方式不同java采用静态联编是一种静态类型语言java的对象引用必须在编译时就进行编译器需要实现强类型检查JavaScript使用动态联编是一种动态类型语言它的对象引用可以在运行时检查并发方法不同java是一种基于线程的并发方法JavaScript具有基于事件的并发方法
对springboot的原理有了解吗
Springboot是有自动配置和启动器和大量注解实现的主要是先执行springboot项目然后使用注解springbootapplication进行自动配置然后执行enableautoconfiguration注解扫描当前启动注解的class对象作为root目录然后使用aotoconfigurationpackage主要是将registrar类导入容器中registar类的作用是扫描主配置类同级目录以及子包并将相应的组件导入springboot创建管理的容器中最后是importaotoconfigurationimportselector.class导入到容器中使用内部工具类进行加载实现将配置类信息交给springfactory加载器进行一系列的容器创建过程
java数据结构
八种哈希表hash队列queue树tree堆heap数组array栈stock链表linked list图graph
ioc和aop是什么
Ioc是控制反转底层是基于自定义注解和反射实现的ioc是不通过new关键字来创建对象而是通过ioc容器来帮助我们实例化对象ioc的作用是降低耦合aop是面向切面编程底层是反射执行流程是先调用getbean然后看有没有被aop切面切中如果没有就返回原类有就判断是否实现了接口有就是jdk动态代理对象没有就是cglib动态代理对象
利用接口做参数写个计算器能完成加减乘除运算
1定义一个接口IComputer含有一个抽象方法int computer(int one, int two)其中参数one和two分别为参与运算的操作数1和操作数2按先后顺序。 2设计四个类Add类、Sub类、Mul类、Div类分别实现IComputer接口完成加、减、乘、除运算。
3设计一个类UseComputer类中含有方法
public static void useCom(IComputer com, int one, int two)
4调用UseComputer中的方法useCom来完成一组键盘输入数据的加减乘除运算。
鸽子猫头鹰飞机利用抽象类和接口list 去重的方式
1.使用LinkedHashSet删除arraylist中的重复数据
2.使用java8新特性stream进行List去重
3.利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序所以只能作为判断条件保证顺序
4.利用List的contains方法循环遍历,重新排序,只添加一次数据,避免重复
5.双重for循环去重
35.springboot的核心注解
有springbootapplication是最核心的注解是配置类然后是enableautoconfiguration是自动装配然后是autoconfigurationpackage是自动导包封装了很多包然后是importautoconfigurationimportselector.class
36.数据库的几种索引
37.如何实现序列化
38.java中有哪些容器
39.数据库事务的隔离级别 springboot的热部署的三种方式Mybatis一级缓存二级缓存Hashmap和hashtable的区别动态代理和静态代理的区别arraylist和linkedlist的区别