自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis中有常见数据类型

string是redis最基本的类型,而且string类型是二进制安全的。意思是redis的string可以包含任何 数据,比如jpg图片或者序列化的对象String类型是最基本的数据类型,一个redis中字符串value最多可以是512Mredis底层提供了三种不同的数据结构实现字符串对象,根据不同的数据自动选择合适的数据结 构。这里的字符串对象并不是指的纯粹的字符串,数字也是可以的当保存的数据中包含字符时,String类型就会用简单动态字符串SDS结构体来保存。

2023-02-09 10:45:03 490 1

原创 Redis缓存雪崩、缓存穿透、缓存击穿详解

解决方案:可以使用一个默认值来防止,例如,当访问一个不存在的 key,然后再去访问数据库,还是 没有,那么就在缓存里放一个占位符,下次来的时候,检查这个占位符,如果发生时占位符,就不去数 据库查询了,防止 DB 宕机。解决方案: 使用分布式锁,例如 zookeeper,同时加入数据的时间戳。同一时刻,只有抢到锁的客户端 才能写入,同时,写入时,比较当前数据的时间戳和缓存中数据的时间戳。解释 2: 大量请求查询一个刚刚失效的 key,导致 DB 压力倍增,可能导致宕机,但实际上,查询的都 是相同的数据。

2023-02-01 21:15:54 329

原创 SpringMVC执行流程和原理

3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器 (如果有),再一起返回给DispatcherServlet。10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。4、DispatcherServlet调用HandlerAdapter(处理器适配器)。9、ViewReslover解析后返回具体View(视图)。

2023-01-29 21:45:41 692

原创 IoC容器启动过程

初始化BeanFactory,先创建DefaultListableBeanFactory实例,然后将配置信息解析成beanDefinition,并封装成beanName -> beanDefinition的ConcurrentHashMap放在BeanFactory。、初始化所有单例Bean,根据Bean的不同类型通过AbstractBeanFactory的getBean()获取,然后createBean()。、准备工作,记录下容器的启动时间、标记已启动状态、处理配置文件中的占位符。

2023-01-12 23:31:07 665

原创 Spring自动装配autowired

在启动Spring IOC时,容器自动的装配一个AutowiredAnnotationBeanPostProcesspr后置处理器,当容器在扫描中扫描到@Autowired时,就会在IOC容器中自动的查找所需要的Bean对象;@Autowired用在字段上时,表示Spring会对改字段进行匹配赋值,在Spring容器中查找(byType),找到能匹配到该字段的对象,然后进行赋值;:当容器内存在一个和指定的属性类型相同的bean时,那么将和这个属性自动的进行装配,当存在多个该类型的bean,将会抛出异常。

2022-12-29 20:10:15 212

原创 Spring bean生命周期

如果Bean实现ApplicationContextAware接口,Spring将调用Bean的setApplicationContext()方法将Bean所在应用上下文引用传入进来;、如果Bean实现DisposableBean接口,Spring将调用destory()接口方法,同样如果Bean使用了destory-method声明销毁方法,该方法也会被调用。、如果Bean实现BeanNameAware接口,Spring将Bean的Id传递给setBeanName()方法;

2022-12-28 19:55:42 492 3

原创 BeanFactory和ApplicationContext对比

它是在容器启动时,一次性创建了所有的Bean。ApplicationContext 启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待, 因为它们已经创建好了。采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用 getBean()),才对该Bean进行加载实例化。是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理 bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。

2022-12-27 19:53:25 332

原创 MyBatis延迟加载

它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调 用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好 的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完 成a.getB().getName()方法的调用。这就是延迟加载的基本原理。当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。

2022-12-12 20:43:59 525

原创 MyBatis缓存机制

由于缓存的层面越高则性能越好,所以在实际开发应用中一般不依赖于MyBatis的二级缓存,而是在业 务层或者在表现层上添加Redis缓存一般用于缓存的数据量必须是在可接受的范围内,一般不经常发生变化但是需要经常读取的时候。

2022-12-07 22:05:07 186

原创 MyBatis工作原理

MyBatis工作原理1、读取MyBatis配置文件,mybatis-config.xml为全局配置文件,配置了MyBatis的运行环境等信息, 例如数据库连接信息。2、加载映射文件:映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis 配置文件mybatis-config.xml中加载。mybatis-config.xml文件可以加载多个映射文件,每个文件对应 数据库中的一张表。3、构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactor

2022-12-06 21:15:17 319

原创 Mybatis

1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本 身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生 态sql,可以严格控制sql执行性能,灵活度高。2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几 乎所有的 JDBC 代码和手动设置参数以及获取结果集。3、通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对

2022-12-03 10:59:12 94

原创 MVC模式

MVC全名是Model View Controller是模型视图控制器的缩写,是一种软件设计典范,是一种架构型的模 式,本身不引入新功能,只是帮助将开发的结构组织的更加合理。它使用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化 定制界面及用户交互的同时,不需要重新编写业务逻辑。最典型的MVC就是 JSP + servlet + javabean 的模式,经常用于请求-响应模型开发中,适用于交互频繁 的大中型应用中。

2022-12-02 21:01:03 413

原创 JSP 简述

尽管ASP和JSP都使用标签与脚本技术来制作动态Web网页,JSP技术允许开发者扩展JSP标签,定制JSP标签库,所以网页制作者充分利用与XML兼容的标签技术强大的功能,大大减少对脚本语言的依赖.由于定制标签技术,使网页制作者降低了制作网页的复杂度.JSP组件(企业JavaBeans,JavaBeans或定制的JSP标签)都是跨平台可重用的.企业JavaBeans组件可以访问传统的数据库,并能以分布式系统模式工作于Solaris,Linux,UNIX和Windows平台.2)JSP文件必须生成。

2022-11-28 21:33:29 122

原创 ServletContext

ServletContext上下文提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文 API用于设置应用程序中所有Servlet共有的信息。Servlet可能需要共享他们之间的共有信息。运行于同 一服务器的Servlet有时会共享资源,如JSP页面、文件和其他ServletServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。request一个用户可有多个 session一个用户一个 servletContext所有用户共用一个。

2022-11-21 21:38:36 78

原创 Cookie与Session的区别

Session是保存在服务端的,有一个唯一标识 session.getId()。在服务端保存Session的方法很多, 内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比 如Memcached之类的来放 Session。Cookie作用于每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。

2022-11-17 20:56:10 313

原创 cookie

Cookie是一个客户端会话技术,是由服务器端创建,放在响应头发送到客户端保存,用于存储少量数 据,因为存放在客户端中,容易被人编造伪造,不是很安全。一般不用于存储重要信息。它是通过键值对传递信息的。Cookie是保存在客户端的数据,所以如果不做设定,默认情况下是跟着客户端一起消失,如果设置 setMaxAge(),将会以设置的数值为主,时间到了将会自动消失。

2022-11-17 20:43:04 232

原创 Servlet

Servlet是一个用于扩展服务器端功能的服务器端组件技术。

2022-11-16 20:25:45 858

原创 web页面之间的3种关系

包含方法中传递了request和response对象,所以当前Servlet和被包含的页面共享request和response 对象。请求转发就是将请求的处理委托给另外一个页面进行处理;重定向就是重新向另外一个页面发起请求。包含就是在一个页面的生成结果中包含另外一个页面。包含可以有静态包含和动态包含两种。如果需要使用request传递共享数据,则需要使用请求转发,否则使用重定向。如果请求转发和重定向都可以的时候,优先使用请求转发,因为效率。效果类似,可以从一个页面跳转到另外一个页面。

2022-11-14 21:35:15 534

原创 JDBC的工作原理

在JDBC技术中可以通过Connection对象中的commit()方法执行提交事务的操作;通过Connection对象中的rollback()执行事务的回滚操作,该回滚操作通过cacth()区域中进行设置。在关系型数据库(例如:SQL Server,MySQL)中,事务就是一条或者一组保存、更新数据库记录的SQL语句。在MYSQL数据库,创建一个数据库,并且在该数据库下创建学生信息表,含有学生的基本信息,并通过JDBC实现对该数据表内容实现添加、修改、删除和查询的操作。

2022-11-09 21:03:41 252

原创 mysql隔离级别

隔离级别描述允许事务读取其它事务没有提交的数据,脏读、不可重复读和幻读问题都会出 现只允许事务读取其它事务已经提交的数据,可以避免脏读,但是不可重复读和 幻读问题都会出现可以保证多次从一个字段中读取相同的数据,可以认为事务开启时会自动对现 有数据进行快照,其它事务修改不管是否提交,当前事务读取的时快照数据, 可以避免脏读和不可重复读,但是幻读问题会出现。快照是MVCC多版本并发控 制可以确保事务是串行执行,可以避免所有的并发问题,但是由于性能低下,一 般不使用。

2022-11-02 21:19:08 138

原创 TCP编程

Socket套接字,就是两台主机之间逻辑连接的端点。TPC协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket本质上就是一组接口,是对TCP/IP协议的封装和应用(程序员层面上)Socket编程主要涉及到客户端和服务器端两个方面,首先是在服务器端创建一个服务器套接字ServerSocket,并把它附加到一个端口上,服务器从这个端口监听连接。

2022-11-01 21:06:17 505

原创 mysql查询语句练习

6、找出10部门的经理、20部门的职员 或者既不是经理也不是职员但是工资高于2000元的员工信息。34、返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资。28、返回部门号、部门名、部门所在位置及其每个部门的员工总数。19、返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名。2、找出从事clerk工作的员工的编号、姓名、部门号。26、返回与30部门员工工资水平相同的员工姓名与工资。5、找出10部门的经理、20部门的职员的员工信息。29、返回员工的姓名、所在部门名及其工资。

2022-10-31 23:38:21 63

原创 MySQL事务

MySQL事务机制主要用于处理操作量大、复杂度高的数据事务必须满足ACID4个条件:A原子性、C一致性、I隔离性、D持久性 事务的进行过程中,在未结束之前,DML语句并不会直接更改底层数据,只是将历史操作记录一下,在 内存中完成记录。只有在事务结束时,而且应该是成功结束时,才会修改底层硬盘文件中的数据如果每次读写数据都需要磁盘的IO,效率会很低。innodb提供了缓存buffer pool作为访问数据库的缓 存,读取和修改操作都会涉及到缓存的操作,缓存会定期刷新到磁盘中,但是写入缓存的数据在系统宕 机时会丢

2022-10-24 20:59:25 460

原创 MySQL索引

就是关键字和数据的映射关系,关键字是从数据中提取的用于标识、检索数据的特定内容MySQL中的索引类型可以分为普通索引、唯一索引、主键索引、全文索引和空间索引(针对空间类型的 数据)

2022-10-23 17:14:31 171

原创 mysql视图

视图一方面可以帮助使用表的一部分而不是表的所有,另一方面也可以针对不同的用户制定不同的查询 视图。比如针对公司的销售人员,只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会 提供给他。再比如人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中 则不提供这个字段。

2022-10-22 16:19:04 137

原创 mysql分组操作group by

mysql分组操作可以使用 GROUP BY 子句将表中的数据分成若干组

2022-10-20 21:31:02 212

原创 存储引擎Innodb和MyISAM的区别

存储引擎Innodb和MyISAM的区别存储引擎定义MySQL中的数据、索引以及其它的数据库对象如何存储,是一套文件系统的实现。

2022-10-18 23:21:27 150

原创 mysql 5类聚集函数

聚集函数用于对于一个集合中的数据进行处理,不是一行一行的数据。

2022-10-16 20:42:53 284

原创 group by-分组操作

可以使用 GROUP BY 子句将表中的数据分成若干组扩展:特殊用法。使用WITH ROLLUP关键字之后,在所有查询出的分组记录之后增加一条记录,该记录 计算查询出的所有记录的总和,即统计记录数量注意:当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY 是互相排斥的。

2022-10-15 18:04:36 276

原创 数据库-范式NF

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不 同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有5+1级范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式 (BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第 一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。如果不满足所要求 的范式,则将不满足范式要求的部分进行分表。

2022-10-12 20:36:15 377

原创 mysql字符串类型

char(n)定长字符串,n值用于表示所允许的最大长度,取值范围0-255,如果不指定长度,则默认1。varchar(n)可变长度的字符串,n值取值范围为0-65535,如果不设置n值则报错。char和varchar。

2022-10-10 10:42:31 516

原创 AUTO_INCREMENT

需要auto_increment从头开始进行计数则需要使用 truncate table 表名称 删除数据 如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以抑制 MySQL的优化:delete from table_name where 1;4、AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号 是127,如加上UNSIGNED,则最大为255。AUTO_INCREMENT数据列必须具备NOT NULL属性。

2022-10-09 21:07:18 856

原创 mysql数值型

decimal和numeric作为字符串存储浮点数,可以实现浮点数的精确存储,并不是float和double种使用 二进制浮点数存储。小数位数最 大值30,总位宽最大值为65,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽,null的意思为未知的数据,它既不是空字符串,不是任何一个具体的值;可以在类型名后添加括号,其中包含一个正整数,例如int(5),这里的含义并不是要求只能存放5位长度 的整数;default只有在不插入数据时生效,如果插入数据,即使插入null值,仍旧不生效。

2022-10-08 20:45:37 460

原创 SQL完整性约束

DBMS为了保证存储的数据都是完整有效的,避免存放垃圾数据,所以提供针对插入的数据进行检查。

2022-09-29 21:34:43 1488

原创 MySQL中的varchar和char

varchar的10代表了申请的空间长度,也是可以存储的数据的最大长度,而int的10只是代表了展示的长度, 不足10位以0填充.也就是说,int(1)和int(10)所能存储的数字大小以及占用的空间都是相同的,只是在展示 时按照长度展示.char是一个定长字段,假如申请了 char(10) 的空间,那么无论实际存储多少内容.该字段都占用10个字符, 而varchar是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间.

2022-09-28 20:54:17 844

原创 简单的Client/Server程序

C/S架构全称为客户端/服务器体系结构,它是一种网络体系结构,其中客户端是用户运行应用程序的PC端或者工作站,客户端要依靠服务器来获取资源。C/S架构是通过提供查询响应而不是总文件传输来减少了网络流量。它允许多用户通过GUI前端更新到共享数据库,在客户端和服务器之间通信一般采用远程调用RPC或标准查询语言SQL语句。

2022-09-27 20:59:45 442

原创 List三种实现的区别

经常需要在内部增删元素,但是很少需要通过索引快速访问时使用;如果多线程访问,则需要自行编程解决线程安全问题。数组,按照索引下标访问速度快O(1),但是删除添加元素时会导致元素的移动,速度慢O(n)数组,按照索引下标访问速度快O(1),但是删除添加元素时会导致元素的移动,速度慢O(n)1、相同点:三个类都是实现了List接口,储存数据特点相同,储存有序的,可重复的数据。不同步,线程不安全,但是并发高,访问效率高。不同步,线程不安全,但是并发高,访问效率高。同步,所以线程安全,但是并发低,访问效率低。

2022-09-27 20:47:53 446

原创 UDP网络通信的收,发包

2、使用DatagramPacket(byte[]buf, int offset, int length, InetAddress address, int port)创建要发送的数据包。2、使用DatagramPacket(byte[]buf,int length)创建字节数组来接收数据包.1、使用DatagramSocket(int)创建一个数据包套接字,绑定到指定的端口。1、使用DatagramSocket()创建一个数据包套接字。3、使用DatagramSocket类的send()方法数据包。

2022-09-27 20:37:36 683

原创 MySQL基本操作语句

用于定义数据库对象的操作语句。

2022-09-23 21:38:26 112

原创 数据库概论

数据库是指长期存储在计算机内有组织可共享的数据集合。数据库中的数据以及数据之间的关系按照一 定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并在一定的范围内可以被多个用户共享。

2022-09-21 21:39:14 63

java基础入门详解.1

java基础入门详解.1

2022-07-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除