全面了解 Redis 高级特性,实现高性能、高可靠的数据存储和处理 Redis 是一种高性能、高可靠的内存数据存储和处理系统,它支持多种数据结构和协议,可以用于各种不同的应用场景。本文将介绍 Redis 的高级特性,包括持久化、事务、Lua 脚本等方面,以及如何使用这些特性实现高性能、高可靠的数据存储和处理。
玩转Mybatis高级特性:让你的数据操作更上一层楼 Mybatis高级特性能够帮助我们更加灵活地操作数据库,包括动态SQL、缓存机制、插件机制、自定义类型转换等。学习这些特性可以让我们更好地利用Mybatis,提高数据操作的效率和质量。
Spring:现代Java开发的必备框架 Spring是一个轻量级的Java框架,它提供了各种企业级应用程序开发的工具和技术。Spring框架的核心是IoC容器和AOP框架。IoC容器使得Java应用程序的组件化变得更加容易,AOP框架使得Java应用程序的切面编程变得更加容易。Spring框架还提供了许多其他的功能,例如数据访问、Web开发、安全性、事务管理等。
并发编程-线程 线程池可以避免频繁创建和销毁线程的开销,同时可以限制并发线程的数量,避免资源过度占用。Java中提供了ThreadPoolExecutor类作为线程池的实现,同时也提供了Executors类作为线程池的工厂,使得可以更加快速地创建线程池。同时阐述了他们的实现方式,优缺点,注意事项和最佳实践,在实际开发中,我们需要根据具体应用场景选择合适的线程池参数和线程安全技术手段,以避免出现数据竞争、死锁、饥饿等问题。在这种状态下,线程不会占用CPU资源,直到指定的时间到达或者被其他线程唤醒,才会进入就绪状态。
并发编程-进程 管道是内核管理的一个缓冲区,相当于内存中一个的小纸条,管道的一端连接着一个进程的输入,一端连接着另一个进程的输出,当管道中没有信息的话,从管道中读的进程会阻塞,直到另一端的进程放入信息,当管道中信息放满时,尝试放入信息的进程会阻塞,直到另一个端进程取出信息,当两个进程都结束时,管道也就结束了。数据报套接字:通过UDP/IP实现,提供一个无序的,不可靠的服务,他不需要建立和维护连接,作为一个单独的网络消息被传输,可能会丢失,复制或乱序的到达,但开销很小,适用于单次查询,不保留连接信息。
JVM总结 JVM(Java Virtual Machine),俗称Java虚拟机。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。
spring注册BeanDefinition过程 测试代码public class ContextApplication { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); IUserService userService = context.getBean("userService", I
spring创建bean过程 一.前言spring作为JAVAEE最核心的框架,是每一个java开发者所必须掌握的,非常重要,本篇从一个简单例子入手,由浅入深的分析spring创建bean的全过程,目标在于彻底搞懂spring原理,方便以后整合其他框架二.测试代码 /** * * * @author <a href="mailto:2256222053@qq.com">zc</a> * @Date 2022/4/3 0003 14:45 */@Lazy public class Cr
【设计模式原则-依赖倒置原则】 什么是依赖倒置原则依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。《百度百科》在Java中的具体体现就是面向接口编程,在接收变量或声名变量时使用接口或抽象类依赖倒置原则的优点降低类间的耦合性。提高系统的稳定性。减少并行开发引起的风险。提高代码的可读性和可维护性。使用依赖倒置的事例public class Client {
安装electron失败 postinstall: `node install.js` 解决方法:将electron下载地址指向taobao镜像npm config set electron_mirror “https://npm.taobao.org/mirrors/electron/”
shiro总结 shiro主要内容:1:SecurityUtils:shiro的工具类,主要作用是获取 SecurityManager和Subjectpublic abstract class SecurityUtils { private static SecurityManager securityManager; //获取Subject public static Subject getSubject() { Subject subject = ThreadContex
io.netty.handler.codec.CorruptedFrameException: Max frame length of 65536 has been exceeded. 记录一下今天使用netty的两个坑1:channel在 active回调里发送消息失败具体如下:连接成功,但是并没有消息返回解决方法:创建新线程异步发送 new Thread(()-> ctx.channel().writeAndFlush(new TextWebSocketFrame("{\"FaceCount\": 0}"))).start();2:客户端发送的数据过大,服务端接收异常解决方法:设置服务端编码器的最大数据长度pipeline.addLast(ne
重新认识一下HashMap HashMap源码解析1,HashMap数据结构,在jdk1.8之前HashMap采用数组+链表的结构,而在1.8的时候采用数组+链表+红黑树的结构,为什么要采用数组+链表+红黑树呢数组查询效率快链表是为了解决数组同一位置的冲突,还有一个就是删除,添加快红黑树是在链表长度太大时,将链表改成黑红数可以大大提高效率数据结构大概就是这个样子先看一下HashMap的构造器public...
初探JVM垃圾回收机制 1JVM心中的垃圾对象长什么样子?(确定垃圾)主要通过下面两个方法来确定这个对象是否为垃圾对象1:引用计数法java里面在操作对象之前,需要先拿到对象的引用,引用记数法就是通过计算这个引用确定,在为对象添加一个引用时,引用计数加1,删除时,引用计数减1,当引用计数为0时则表示这个对象没有被引用,就可以确定它是一个垃圾了缺点:如果有循环引用,则引用计数一直不为0,一直无法被回收2:可达性分析解决了引用记数法的循环引用问题可达性分析通过定义一个GC Root对象,向下搜索,搜索的路径被称为引用链,
JVM内存模型总结 1内存模型1.1:线程私有区域1.1.1 程序计数器:为什么会有程序计数器:JVM的多线程是通过CPU时间片轮转(即线程轮流切换并分配处理器执行时间)算法来实现的。所以某个线程在执行过程中可能会因为时间片耗尽而被挂起,而另一个线程获取到时间片开始执行。当被挂起的线程重新获取到时间片的时候,它要想从被挂起的地方继续执行,就必须知道它上次执行到哪个位置,在JVM中,通过程序计数器就是来记录某个线程的字节码执行位置的特点: 1. 用于存储当前运行的线程所执行的字节码的行号指示器 2. 线程隔
Mysql存储引擎 InnoDB存储引擎场景:面向在线事务处理(OLTP)的应用特点:支持事务,行锁设计、支持外键,并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁重点:从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎MyISAM存储引擎场景:主要面向一些OLAP数据库应用特点:它的缓冲池只缓存(cache)索引文件,而不缓冲数据文件不支持事务、表锁设计,支持全文索引,MySQL 5.5.8版本之前MyISAM存储引擎是默认的存储引擎(除Windows版本外)NDB