自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (10)
  • 收藏
  • 关注

原创 单体架构VS微服务架构

微服务架构:多个服务,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制。每个服务独立部署,服务可用不同的语言开发,使用不同的数据存储技术。如上示意图,前台页面部署在nginx中,通过后台网关负载均衡调用不同的模块服务,每个服务为了高可用都是集群部署,并且服务注册在配置服务器中。如上示意图,应用前端页面,后台所有模块功能都放在一个应用程序中,并部署在一台服务器上。单体架构:一个包含有所有功能的应用程序。

2024-10-23 17:56:52 366

原创 SpringBoot中yml文件多环境配置

项目打好包后,通过>java -jar 项目.jar --spring.profiles.active=test运行项目并手工指定test环境信息,运行结果就是test环境,2、通过主配置文件application.yml中的spring.profiles.active=xxx指定具体的环境。从运行结果看出,项目运行的配置是dev环境。

2024-10-21 14:57:27 196

原创 JMeter模拟并发请求

方式三,并发请求多少,堆内存中生成多少个TicketController实例,并且每个TicketController实例各自持有TICKET_AMOUNT,访问各自的成员属性也就不会发生数据不一致问题。方式一、二,堆内存中只有一个TicketController实例,并且TICKET_AMOUNT不属于实例对象,属于共享的数据区,对这种共享数据并发操作时,需要锁机制控制,防止出现数据不一致。从运行结果可以看出,在高并发的时候,没有出现超卖或数据不一致问题,数据结果符合预期。

2024-10-19 14:38:08 530

原创 分布式介绍

CAP理论是分布式架构中提出来的一种设计思想模型,全称是由Consistency、Availability、Partition Tolerance三个词组成。CAP理论的核心思想是,一个分布式系统最多只能同时满足C、A、P特性中的两个,而网络分区是不可避免的,因而只能在CP或AP做出选择。

2024-10-19 10:21:34 277

原创 ThreadLocal源码详解

从示意图可以看出,红色实线部分是强引用,黑色虚线部分是弱引用,当gc时,如果ThreadLocal没有被外部强引用,会将ThreadLocal对象回收掉,会导致ThreadLocalMap的Key为null,key=null对应的value,被线程对象Thread强引用,如果线程迟迟不结束,那些value的这块内存永远无法访问,也无法回收,发送了内存泄漏。解开注释:studentThreadLocal.remove();如果泄漏的数据量足够大,可能会引起内存溢出,导致程序异常结束。

2024-10-17 21:40:17 1024

原创 ThreadLocal的应用场景

这块内容后续的章节会介绍。

2024-10-16 21:35:56 786

原创 关闭线程池的API介绍

【代码】关闭线程池的API介绍。

2024-10-15 15:49:17 229

原创 线程池核心参数介绍

说明:手工创建了一个线程池,核心线程数10,最大线程数20,任务队列100,使用默认的线程工厂生成线程,拒绝策略选择AbortPolicy。核心线程数(参数传递),最大线程数Integer.MAX_VALUE,任务队列采用延迟队列DelayedWorkQueue。核心线程数0,最大线程数Integer.MAX_VALUE,任务队列采用同步队列SynchronousQueue。SynchronousQueue:同步队列,即任务到来时,不放入队列等待,直接交给工作线程执行任务。

2024-10-14 16:11:01 932

原创 基于MP提供的dynamic-datasource实现多数据源

项目遇到的多数据源场景:通过Flink CDC采集某个数据源变化数据(主表数据),变化数据(主表数据) + 源数据源的变化数据的辅表数据 + 映射转换程序计算得到最终结果数据,并将最终的结果落库保存在另外一个数据源中,上述的需求中就需要2个数据源,源数据源查询数据,目标数据源更新数据。配置了2个数据源,master数据源(目标数据源,负责计算结果的写入),slave数据源(源数据源,负责源数据的查询)TestServiceImpl的逻辑模拟了2个数据源的操作,源数据源读取数据,目标数据源更新数据。

2024-10-11 16:00:20 349

原创 SpringBoot集成Kafka

Kafka 是一个分布式的基于发布/订阅模式的消息队列,它最大的特性是可以实时的处理大数据量以满足各种需求场景。

2024-10-10 21:39:27 556

原创 JAVA基础面试题汇总(持续更新)

3)JVM通过执行引擎(Execution Engine)将字节码翻译成底层系统识别的指令再交由CPU 去执行,此过程中需要调用其他语言的接口本地库接口(Native Interface) 来实现整个程序的功能。在Java中,每个对象都有一个与之关联的哈希码(hash code),这是通过对象的内部状态计算出来的一个整数值,用于在哈希表等数据结构中进行快速查找‌。如果对象student放入hash表中,如HashMap,通过hashCode()方法的值可以快速的从Map中获取对象的位置,实现快速检索。

2024-10-06 12:51:45 1128

原创 有状态(Session) VS 无状态(Token)

上图中,浏览器客户端请求后台数据时,携带了token信息,nginx负载均衡到tomcat服务器上,服务器通过解密token,判断用户的请求是否有效(用户是否登录,是否过期,token是否伪造),对真实有效的token,服务端接受客户端请求并返回数据到客户端。Header:头部用于描述关于该 JWT 的最基本的信息,例如其类型以及签名所用的算法等,如{"type":"JWT","alg":"HS256"},Base64 加密header后的字符串为(去中心化(有状态下session集中存放Redis)

2024-10-04 19:10:39 1308

原创 SpringBoot介绍及整合Mybatis Plus

SpringBoot通过自动配置、默认配置可以简化配置过程;3、统一的异常处理(GenericExceptionHandler、BusinessExceptionCode、BusinessException)1、自动配置、默认配置:SpringBoot提供自动配置功能,根据项目的依赖和环境自动设置Spring应用程序,减少了手动配置的复杂度。4、健康检查、监控:SpringBoot提供健康检查、应用监控、日志管理等。4、实体、dto、Mapper接口、mapper.xml。1、增加依赖【pom.xml】

2024-10-03 15:28:51 1171

原创 Redis介绍及整合Spring

Redis是内存数据库,Key-value型NOSQL数据库,项目上经常将一些不经常变化并且反复查询的数据放入Redis缓存,由于数据放在内存中,所以查询、维护的速度远远快于硬盘方式操作数据(关系型数据库)。Redis的数据存储在内存中,同时也会持久化到硬盘中,极端情况Redis服务器宕机时,缓存数据也可以从硬盘中恢复。Redis的常用配置(配置文件redis.conf)如下:daemonize yes 设置 Redis 以守护进程方式运行,启动后台运行。

2024-10-01 21:51:51 916

原创 Spring Task 调度任务

从运行结果可以看出,spring启动后,程序每隔5秒钟定时执行了test方法。cron表达式是一种用于设置定时任务的语法规则。它由6个字段组成,分别表示。定时任务类:ScheduleTaskTest,系统每隔5秒钟执行一次test方法。

2024-09-30 15:08:38 556

原创 Spring整合Mybatis Plus

Dto类:对于复杂查询的sql结果,根据查询的结果集字段新建一个dto类,下方的StudentDto对于下方mapper.xml文件中的resultType="com.text.entity.StudentDto":spring-context是spring的核心、AOP需要aspectjweaver支持,事务管理器需要spring-jdbc,mybatis-plus框架,druid是数据源。从运行结果可以看出,分页查询时,先查询了总记录数,再查询了分页的数据。1、增加项目依赖【pom.xml】

2024-09-30 10:53:04 1297

原创 Spring整合Mybatis

spring-context是spring的核心、AOP需要aspectjweaver支持,事务管理器需要spring-jdbc,mybatis-spring 是spring整合mybatis的核心,druid是数据源。2、spring和mybatis配置文件配置【applicationContext.xml、mybatis-config.xml】4、服务接口及实现【StudentService.java、StudentServiceImpl.java】1、增加项目依赖【pom.xml】

2024-09-29 21:13:20 824

原创 Spring MVC 常用注解

GetMapping 绑定GET请求,注解作用在方法上@PostMapping 绑定Post请求,注解作用在方法上@RequestMapping 通用注解,通常用在Controller上,用于请求URL的前缀@Controller 控制器类,作用在类上,@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面@ResponseBody 作用在方法上,标识返回实体对象,使用此注解后,方法返回的数据会直接写入HTTP响应体中。‌。

2024-09-29 16:01:44 850

原创 Mybatis-Mapper接口方式

Mybatis框架在配置方式的情况下,对数据库的CRUD操作直接通过SqlSession对象来操作,常用的方法有select、insert、update、delete等方法,在这些方法的参数中,需要准确的写明对应xml文件的namespace+方法,参考下图的代码方式: mybatis接口方式(推荐方式)实现数据库的CRUD操作,采用接口方式开发,根据接口里面的方法实现数据库的操作,基于这种方式实现,需要如下约定: mybatis Mapper接口方式实现数据库操作有如下步骤1、

2024-09-29 12:11:25 370

原创 Spring JDBC及声明式事务

Spring JDBC 封装了原生的JDBC API,使得处理关系型数据库更加简单。Spring JDBC的核心是JdbcTemplate,里面封装了大量数据库CRUD的操作。使用Spring JDBC有如下步骤:1、pom增加依赖spring-context是spring的核心,负责容器中对象实例创建;spring-jdbc是对原生jdbc的封装;logback-classic主要为了数据库操作时辅助信息的日志输出。2、IOC容器实例化数据源对象dataSource和JdbcTemplate对象。

2024-09-26 08:22:34 1081

原创 Spring AOP实现原理-动态代理

AOP是基于实现切点方法的动态扩展。当切点目标类实现了接口,AOP通过JDK自带的动态代理扩展被代理对象方法的功能;当切点目标类未实现接口,Spring 通过CGLib组件实现扩展被代理对象方法功能。代理模式的核心是创建一个代理对象,代理对象内部包含封装了被代理对象,最终通过执行被代理对象的方法达到动态扩展方法的功能,代理模式分为静态代理和动态代理。

2024-09-23 21:48:03 986

原创 Spring AOP - 注解方式实现

3、增加切面类(开启切面注解@EnableAspectJAutoProxy、增加切面标识@Aspect)及通知方法(环绕通知@Around,并配置节点表达式execution)2、配置文件增加注解扫描的包(applicationContext.xml)前文已经讨论了基于配置文件方式实现Spring AOP(),本文采用注解的方式实现前文相同的功能。1、项目增加aop依赖(pom.xml)4、业务方法StudentDaoImpl。5、测试类Application。

2024-09-23 15:41:46 413

原创 Spring AOP - 配置文件方式实现

1、配置文件:applicationContext.xml。

2024-09-22 20:04:43 1021

原创 Spring IOC容器Bean对象管理-Java Config方式

【代码】Spring IOC容器Bean对象管理-Java Config方式。

2024-09-19 21:30:13 475

原创 Spring IOC容器Bean对象管理-注解方式

Resource 注解StudentServiceImpl 后,先从容器中找bean名称=studentDao的对象,没找到(系统中实例对象名称是studentDaoImpl)再通过类型StudentDao寻找,找到studentDaoImpl,注入studentServiceImpl对象的studentDao属性中,1、applicationContext.xml加入扫描的包,此包项下的类被IOC容器扫描,如有注解,则实例化对象。配置文件config.properties(示例jdbc连接)

2024-09-19 10:23:34 666

原创 IOC容器Bean的Scope及生命周期

1、容器Bean的Scope范围spring容器在非WEB环境下bean的范围包括prototype(多例)、singleton(单例)2种,单例会存在线程安全问题,多例则没有此问题。

2024-09-18 08:34:21 389

原创 Spring-IOC容器-ApplicationContext

Inversion of Control 控制反转,是一种设计原则,spring 中通过DI(dependency Injection)来具体实现。比如原本对象的实例化,是通过程序主动New出来,IOC中的对象实例交给Spring框架来实例化,程序使用时直接通过spring获取即可。

2024-09-16 15:56:00 644

原创 Mybatis批量操作

当1次插入的数据量过大,如100万,受限于网络包大小限制或者有些数据库有最大接受包的限制(如mysql 中max_allowed_packet 参数限制,默认值为4M),会出现如下sql异常:com.mysql.jdbc.PacketTooBigException。上述程序执行后,后台只会发送1条sql语句:INSERT INTO your_table (column1, column2, ...) VALUES(column1, column2, ...),(...)示例:批量insert多条语句。

2024-09-13 13:54:52 876

原创 Mybatis配置数据源-druid

重点:把数据源的类型修改为自定义的DruidDataSourceFactory。3、配置mybatis配置文件(mybatis-config.xml)示例:以alibaba的druid连接池为例,配置mybatis数据源。step2:实现datasourceFactory类。2、实现datasourceFactory类。1、添加数据源依赖(修改pom.xml)step1:添加druid依赖。3、配置mybatis配置文件。

2024-09-13 09:55:26 334

原创 Mybatis缓存

上述代码执行后,即使第1个sqlSession已关闭,开启第2个sqlSession查询相同的数据,在mybatis的日志中,只有1条sql查询语句,并且返回的2个商品的内存地址一样。,表示在一个sqlSession(连接)内部,多次查询相同的sql语句,第二次执行相同sql语句时,直接从缓存(JVM内部开辟的一块空间)获取,不再查询sql语句。在分布式应用环境下,应用部署在多个实例下,mybatis缓存保存在不同JVM上,缓存数据可能在不同的JVM上不一致,出现数据不一致的问题,

2024-09-12 20:39:19 343

原创 日志框架介绍

下图的SLF4J和Commons-Logging就是日志门面,只能日志接口,下方的log4j 或者logback负责具体的写日志操作。如果在项目中使用了SLF4J的门面日志,实现日志框架同时引入了log4j和logback框架,系统启动时就会报jar冲突(下图错误),解压执行的jar发现,包里确实同时存在log4j.jar和logback.jar(见下图)日志框架采用门面日志的方式设计,即它不负责写日志,而是。

2024-09-12 14:44:03 249

原创 Mybatis--SqlSessionFactory 、SqlSession

SqlSession:可以理解为数据库的连接Connection,它负责数据库的CRUD操作,由SqlSessionFactory负责创建。SqlSessionFactory:创建SqlSession的工厂类,在实际项目开发过程中,整个应用。3、通过 SqlSessionFactoryBuilder 构建 SqlSessionFactory。2、创建 SqlSessionFactoryBuilder 实例。的一个SqlSessionFactory对象。1、读取mybatis配置文件。

2024-09-10 21:38:23 340

原创 Lambda表达式

jdk中常用的函数式接口定义在java.util.function项下,如Predicate、Consumer、Function等,在集合List,Set,Map的流式编程的方法(如map、filter)等方法中,方法入参大量采用了Predicate、Consumer、Function表达式。上述定义了一个Operator接口 ,下方代码将实现类的代码赋值给了接口operator。Lambda表达式:可以理解就是一个接口的实现,将接口实现类的。函数式接口:一个interface里面只有1个接口。

2024-09-10 16:43:22 334

原创 java--反射

大部分的高级框架都用到反射技术,如spring容器启动后,会自动通过各类注解(@Resource、@Service等)实例化对象。反射用到核心类有:Class、Constructor、Method、Field,下述的示例演示了这些类的核心方法。动态的访问类或者对象,如下述程序中根据className的不同,程序运行时动态的加载类和创建对象。

2024-09-10 11:30:17 474

原创 连接池-druid

原因:通过jdbc 创建Connection时比较耗费资源和时间,如果程序每次执行数据库操作都自己创建连接,项目不好控制连接数量,另外程序执行相对耗时。市面上有很多厂商有连接池组件,目前比较出名的是alibaba druid 以及 Hikari ,本文讨论的是druid。示例:配置连接池类,在引入spring后,可以通过@Configuration 注解在项目启动后,初始化好连接池。通过debug发现,上述main方法执行到System那一行时,已经创建好了10个连接。

2024-09-08 14:51:34 329

原创 SQL注入攻击 --JDBC模拟及解决

此程序执行的sql是:select * from SYS_AUTHORITY where AUTH_MENU=''' or 1=1 or 1='''通过jdbc的Statement执行sql时,执行的sql中有通过参数传递拼接后的sql,此种情况下,可以通过。:需求是根据前台传递的menu参数查询权限列表,如下sql 就是查询COMMON菜单的权限列表数据。此sql 执行后,导致所有的权限信息都查询出来了,导致数据泄露,数据库被攻击,发生了sql注入攻击。:利用SQL漏洞越权获取数据的黑客行为。

2024-09-07 13:48:27 403

原创 SQL各子句的执行顺序

示例:-- 找出年龄大于等于18岁学生所在的班级并且学生人数包含2人以上的班级。GROUP BY子句:按指定的列分组结果集中的记录。HAVING子句:基于分组聚合后的结果过滤记录。ORDER BY 子句:按指定的列排序结果集。WHERE 子句:基于指定的条件过滤记录。SELECT子句:基于结果集选择特定的列。FROM 子句:确定查询的基础表和视图。LIMIT子句:对结果集进行分页展示。

2024-09-07 10:28:12 398

原创 多线程下载网络资源

示例:模拟通过5个线程下载10个网络图片。

2024-09-07 08:43:27 199

原创 文件操作 JAVA I/O操作

1、字节流操作二进制文件(非文本文件)InputStream、OutputStream。2、字符流操作文本文件 Reader,Writer。示例:字符缓冲流拷贝文本文件。

2024-09-06 16:40:50 261

原创 常见的4种线程池

示例:10个任务的执行,只会用到线程池中创建好的3个线程。示例:10个任务的执行,只会用到1个线程执行这10条任务。示例:每隔3秒钟,线程池创建的3个线程会执行这10个任务。1、固定大小的线程池。

2024-09-05 11:46:28 165

mybatis3参考手册

mybatis3参考手册

2013-02-17

w3school中文参考手册

w3school中文参考手册

2013-02-03

junit4.7参考手册

junit4.7参考手册

2013-02-03

easyui-1.3.1api

easyui-1.3.1api

2013-02-03

jdom_api

jdom_api

2013-02-03

jdk1.6api

jdk1.6api

2013-02-03

javascript参考手册

javascript参考手册

2013-02-03

javaEE6api

javaEE6api

2013-02-03

css参考手册

css参考手册

2013-02-03

空空如也

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

TA关注的人

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