- 博客(111)
- 资源 (1)
- 收藏
- 关注
原创 Redis中有常见数据类型
string是redis最基本的类型,而且string类型是二进制安全的。意思是redis的string可以包含任何 数据,比如jpg图片或者序列化的对象String类型是最基本的数据类型,一个redis中字符串value最多可以是512Mredis底层提供了三种不同的数据结构实现字符串对象,根据不同的数据自动选择合适的数据结 构。这里的字符串对象并不是指的纯粹的字符串,数字也是可以的当保存的数据中包含字符时,String类型就会用简单动态字符串SDS结构体来保存。
2023-02-09 10:45:03
572
原创 Redis缓存雪崩、缓存穿透、缓存击穿详解
解决方案:可以使用一个默认值来防止,例如,当访问一个不存在的 key,然后再去访问数据库,还是 没有,那么就在缓存里放一个占位符,下次来的时候,检查这个占位符,如果发生时占位符,就不去数 据库查询了,防止 DB 宕机。解决方案: 使用分布式锁,例如 zookeeper,同时加入数据的时间戳。同一时刻,只有抢到锁的客户端 才能写入,同时,写入时,比较当前数据的时间戳和缓存中数据的时间戳。解释 2: 大量请求查询一个刚刚失效的 key,导致 DB 压力倍增,可能导致宕机,但实际上,查询的都 是相同的数据。
2023-02-01 21:15:54
439
原创 SpringMVC执行流程和原理
3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器 (如果有),再一起返回给DispatcherServlet。10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。4、DispatcherServlet调用HandlerAdapter(处理器适配器)。9、ViewReslover解析后返回具体View(视图)。
2023-01-29 21:45:41
753
原创 IoC容器启动过程
初始化BeanFactory,先创建DefaultListableBeanFactory实例,然后将配置信息解析成beanDefinition,并封装成beanName -> beanDefinition的ConcurrentHashMap放在BeanFactory。、初始化所有单例Bean,根据Bean的不同类型通过AbstractBeanFactory的getBean()获取,然后createBean()。、准备工作,记录下容器的启动时间、标记已启动状态、处理配置文件中的占位符。
2023-01-12 23:31:07
717
原创 Spring自动装配autowired
在启动Spring IOC时,容器自动的装配一个AutowiredAnnotationBeanPostProcesspr后置处理器,当容器在扫描中扫描到@Autowired时,就会在IOC容器中自动的查找所需要的Bean对象;@Autowired用在字段上时,表示Spring会对改字段进行匹配赋值,在Spring容器中查找(byType),找到能匹配到该字段的对象,然后进行赋值;:当容器内存在一个和指定的属性类型相同的bean时,那么将和这个属性自动的进行装配,当存在多个该类型的bean,将会抛出异常。
2022-12-29 20:10:15
273
原创 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
555
3
原创 BeanFactory和ApplicationContext对比
它是在容器启动时,一次性创建了所有的Bean。ApplicationContext 启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待, 因为它们已经创建好了。采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用 getBean()),才对该Bean进行加载实例化。是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理 bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。
2022-12-27 19:53:25
363
原创 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
565
原创 MyBatis缓存机制
由于缓存的层面越高则性能越好,所以在实际开发应用中一般不依赖于MyBatis的二级缓存,而是在业 务层或者在表现层上添加Redis缓存一般用于缓存的数据量必须是在可接受的范围内,一般不经常发生变化但是需要经常读取的时候。
2022-12-07 22:05:07
244
原创 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
354
原创 Mybatis
1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本 身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生 态sql,可以严格控制sql执行性能,灵活度高。2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几 乎所有的 JDBC 代码和手动设置参数以及获取结果集。3、通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对
2022-12-03 10:59:12
134
原创 MVC模式
MVC全名是Model View Controller是模型视图控制器的缩写,是一种软件设计典范,是一种架构型的模 式,本身不引入新功能,只是帮助将开发的结构组织的更加合理。它使用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化 定制界面及用户交互的同时,不需要重新编写业务逻辑。最典型的MVC就是 JSP + servlet + javabean 的模式,经常用于请求-响应模型开发中,适用于交互频繁 的大中型应用中。
2022-12-02 21:01:03
450
原创 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
179
原创 ServletContext
ServletContext上下文提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文 API用于设置应用程序中所有Servlet共有的信息。Servlet可能需要共享他们之间的共有信息。运行于同 一服务器的Servlet有时会共享资源,如JSP页面、文件和其他ServletServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。request一个用户可有多个 session一个用户一个 servletContext所有用户共用一个。
2022-11-21 21:38:36
109
原创 Cookie与Session的区别
Session是保存在服务端的,有一个唯一标识 session.getId()。在服务端保存Session的方法很多, 内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比 如Memcached之类的来放 Session。Cookie作用于每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。
2022-11-17 20:56:10
347
原创 cookie
Cookie是一个客户端会话技术,是由服务器端创建,放在响应头发送到客户端保存,用于存储少量数 据,因为存放在客户端中,容易被人编造伪造,不是很安全。一般不用于存储重要信息。它是通过键值对传递信息的。Cookie是保存在客户端的数据,所以如果不做设定,默认情况下是跟着客户端一起消失,如果设置 setMaxAge(),将会以设置的数值为主,时间到了将会自动消失。
2022-11-17 20:43:04
280
原创 web页面之间的3种关系
包含方法中传递了request和response对象,所以当前Servlet和被包含的页面共享request和response 对象。请求转发就是将请求的处理委托给另外一个页面进行处理;重定向就是重新向另外一个页面发起请求。包含就是在一个页面的生成结果中包含另外一个页面。包含可以有静态包含和动态包含两种。如果需要使用request传递共享数据,则需要使用请求转发,否则使用重定向。如果请求转发和重定向都可以的时候,优先使用请求转发,因为效率。效果类似,可以从一个页面跳转到另外一个页面。
2022-11-14 21:35:15
599
原创 JDBC的工作原理
在JDBC技术中可以通过Connection对象中的commit()方法执行提交事务的操作;通过Connection对象中的rollback()执行事务的回滚操作,该回滚操作通过cacth()区域中进行设置。在关系型数据库(例如:SQL Server,MySQL)中,事务就是一条或者一组保存、更新数据库记录的SQL语句。在MYSQL数据库,创建一个数据库,并且在该数据库下创建学生信息表,含有学生的基本信息,并通过JDBC实现对该数据表内容实现添加、修改、删除和查询的操作。
2022-11-09 21:03:41
313
原创 mysql隔离级别
隔离级别描述允许事务读取其它事务没有提交的数据,脏读、不可重复读和幻读问题都会出 现只允许事务读取其它事务已经提交的数据,可以避免脏读,但是不可重复读和 幻读问题都会出现可以保证多次从一个字段中读取相同的数据,可以认为事务开启时会自动对现 有数据进行快照,其它事务修改不管是否提交,当前事务读取的时快照数据, 可以避免脏读和不可重复读,但是幻读问题会出现。快照是MVCC多版本并发控 制可以确保事务是串行执行,可以避免所有的并发问题,但是由于性能低下,一 般不使用。
2022-11-02 21:19:08
178
原创 TCP编程
Socket套接字,就是两台主机之间逻辑连接的端点。TPC协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket本质上就是一组接口,是对TCP/IP协议的封装和应用(程序员层面上)Socket编程主要涉及到客户端和服务器端两个方面,首先是在服务器端创建一个服务器套接字ServerSocket,并把它附加到一个端口上,服务器从这个端口监听连接。
2022-11-01 21:06:17
547
原创 mysql查询语句练习
6、找出10部门的经理、20部门的职员 或者既不是经理也不是职员但是工资高于2000元的员工信息。34、返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资。28、返回部门号、部门名、部门所在位置及其每个部门的员工总数。19、返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名。2、找出从事clerk工作的员工的编号、姓名、部门号。26、返回与30部门员工工资水平相同的员工姓名与工资。5、找出10部门的经理、20部门的职员的员工信息。29、返回员工的姓名、所在部门名及其工资。
2022-10-31 23:38:21
89
原创 MySQL事务
MySQL事务机制主要用于处理操作量大、复杂度高的数据事务必须满足ACID4个条件:A原子性、C一致性、I隔离性、D持久性 事务的进行过程中,在未结束之前,DML语句并不会直接更改底层数据,只是将历史操作记录一下,在 内存中完成记录。只有在事务结束时,而且应该是成功结束时,才会修改底层硬盘文件中的数据如果每次读写数据都需要磁盘的IO,效率会很低。innodb提供了缓存buffer pool作为访问数据库的缓 存,读取和修改操作都会涉及到缓存的操作,缓存会定期刷新到磁盘中,但是写入缓存的数据在系统宕 机时会丢
2022-10-24 20:59:25
490
原创 MySQL索引
就是关键字和数据的映射关系,关键字是从数据中提取的用于标识、检索数据的特定内容MySQL中的索引类型可以分为普通索引、唯一索引、主键索引、全文索引和空间索引(针对空间类型的 数据)
2022-10-23 17:14:31
201
原创 mysql视图
视图一方面可以帮助使用表的一部分而不是表的所有,另一方面也可以针对不同的用户制定不同的查询 视图。比如针对公司的销售人员,只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会 提供给他。再比如人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中 则不提供这个字段。
2022-10-22 16:19:04
159
原创 存储引擎Innodb和MyISAM的区别
存储引擎Innodb和MyISAM的区别存储引擎定义MySQL中的数据、索引以及其它的数据库对象如何存储,是一套文件系统的实现。
2022-10-18 23:21:27
176
原创 group by-分组操作
可以使用 GROUP BY 子句将表中的数据分成若干组扩展:特殊用法。使用WITH ROLLUP关键字之后,在所有查询出的分组记录之后增加一条记录,该记录 计算查询出的所有记录的总和,即统计记录数量注意:当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY 是互相排斥的。
2022-10-15 18:04:36
336
原创 数据库-范式NF
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不 同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有5+1级范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式 (BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第 一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。如果不满足所要求 的范式,则将不满足范式要求的部分进行分表。
2022-10-12 20:36:15
424
原创 mysql字符串类型
char(n)定长字符串,n值用于表示所允许的最大长度,取值范围0-255,如果不指定长度,则默认1。varchar(n)可变长度的字符串,n值取值范围为0-65535,如果不设置n值则报错。char和varchar。
2022-10-10 10:42:31
579
原创 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
996
原创 mysql数值型
decimal和numeric作为字符串存储浮点数,可以实现浮点数的精确存储,并不是float和double种使用 二进制浮点数存储。小数位数最 大值30,总位宽最大值为65,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽,null的意思为未知的数据,它既不是空字符串,不是任何一个具体的值;可以在类型名后添加括号,其中包含一个正整数,例如int(5),这里的含义并不是要求只能存放5位长度 的整数;default只有在不插入数据时生效,如果插入数据,即使插入null值,仍旧不生效。
2022-10-08 20:45:37
502
原创 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
902
原创 简单的Client/Server程序
C/S架构全称为客户端/服务器体系结构,它是一种网络体系结构,其中客户端是用户运行应用程序的PC端或者工作站,客户端要依靠服务器来获取资源。C/S架构是通过提供查询响应而不是总文件传输来减少了网络流量。它允许多用户通过GUI前端更新到共享数据库,在客户端和服务器之间通信一般采用远程调用RPC或标准查询语言SQL语句。
2022-09-27 20:59:45
520
原创 List三种实现的区别
经常需要在内部增删元素,但是很少需要通过索引快速访问时使用;如果多线程访问,则需要自行编程解决线程安全问题。数组,按照索引下标访问速度快O(1),但是删除添加元素时会导致元素的移动,速度慢O(n)数组,按照索引下标访问速度快O(1),但是删除添加元素时会导致元素的移动,速度慢O(n)1、相同点:三个类都是实现了List接口,储存数据特点相同,储存有序的,可重复的数据。不同步,线程不安全,但是并发高,访问效率高。不同步,线程不安全,但是并发高,访问效率高。同步,所以线程安全,但是并发低,访问效率低。
2022-09-27 20:47:53
490
原创 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
717
原创 数据库概论
数据库是指长期存储在计算机内有组织可共享的数据集合。数据库中的数据以及数据之间的关系按照一 定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并在一定的范围内可以被多个用户共享。
2022-09-21 21:39:14
91
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人