- 博客(115)
- 收藏
- 关注
原创 Java:115-Spring Boot的底层原理(下篇)
上述代码中,"xmlns:th="http://www.thymeleaf.org"用于引入Thymeleaf模板引擎标签,使用关键字"th"标注标签是Thymeleaf模板提供的标签,其中,"th:href"用于引入外联样式文件,"th:text"用于动态显示标签文本内容(没有则操作默认值,一般是标签里面的)除此之外,Thymeleaf模板提供了很多标签,接下来,通过一张表罗列Thymeleaf的常用标签:示例使用了Thymeleaf模板的变量表达式${…}用来动态获取P标签中的内容如果当前程序没
2024-07-22 23:51:11 1153
原创 Java:114-Spring Boot的底层原理(上篇)
对应的项目:启动类:我们直接的启动上面的启动类,http://localhost:8080/hello/boot,上面的依赖版本和jdk版本是需要适配的,否则可能启动不了,还有,在104章博客中,还有关于一些项目版本的说明,可以看一看如果访问后出现了数据,那么我们操作成功了单元测试与热部署 :单元测试 :开发中,每当完成一个功能接口或业务方法的编写后,通常都会借助单元测试验证该功能是否正确,Spring Boot对项目的单元测试提供了很好的支持,在使用时,需要提前在项目的pom.xml文件中
2024-07-22 23:41:11 1107
原创 Java:113-Spring Data JPA详解
但是呢,JPA最终也是操作映射的,所以可以称JPA也是一种ORM的规范有jpa规范的框架,自身jpa还不够,我需要增强的jpa(Spring Data JPA)//可以引⼊jpql(jpa查询语⾔)语句进⾏查询,jpql 语句类似于sql,只不过sql操作的是数据表和字段,jpql操作的是对象和属性//⽐如 from Resume where id=xx(在hibernate中称为hql语句)1") //指定?,代表对应的给入的值,后面的1代表接口参数中的第一个//即?1代表使用Long id。
2024-06-17 16:04:27 2717 2
原创 Java:112-SpringMVC的底层原理(下篇)
对应的web.xml:对应的spring-mvc.xml:对应的Demo接口及其实现类:对应的DemoController类:现在自行配置服务器,然后启动后,访问http://localhost:8080/mvcdome/demo/name?name=2(mvcdome是设置的项目名),如果打印了"你好:2",说明操作成功(视图没有处理,所以只需要看打印即可),即项目创建完毕,现在我们就以这个项目来学习源码或者阅读解析一下源码,当然,这样的处理并不非常好,因为我们并不能随时修改细节,所以与
2024-06-09 16:15:40 1274
原创 Java:111-SpringMVC的底层原理(中篇)
如果需要补充,自行补充吧对应的web.xml:index.jsp:springmvc.xml:entity里面的User类:test类:自行配置tomcat,启动,运行看看结果,那么我们基础操作搭建完毕,现在我们来操作一下拦截:在com包下创建Interceptor包,然后创建MyInterceptor类:其中HandlerInterceptor接口如下:这三个代表了三个地方,前面的三个拦截,比如:preHandle是第一个拦截,postHandle是第二个拦截,after
2024-06-09 16:05:56 991
原创 Java:110-SpringMVC的底层原理(上篇)
大致流程如下:对应的web.xml:在pom.xml中加上如下依赖:然后再web.xml中加上如下:一般tomcat的web.xml在其conf目录里面,如图:在java资源文件夹下,创建com.controller包,然后创建DisController类:在WEB-INF文件夹下,创建jsp目录,然后创建如下success.jsp文件:在资源文件夹下加上springmvc.xml文件:补充web.xml:假设项目是springmvc这个名称,端口是8080,那么启动服务
2024-06-09 15:45:49 1257
原创 Java:109-Gradle构建工具的学习
上面的处理是从上往下开始找的,如果都没有找到,那么就会报错,注意了,由于我们配置了环境变量,所以我们使用的gradle就是对应的下载的gradle,否则在以后如果你使用的gradle不是这个,那么自然这个源的配置不会被你使用,比如idea中需要进行选择来增加速度mavenLocal():指定使用maven本地仓库,而本地仓库在配置maven时settings文件指定的仓库位置,如E:/repository,gradle 查找jar包顺序如下:USER_HOME/.m2/settings.xml(代表是里面
2024-01-03 11:54:30 970
原创 Java:108-Spring的底层原理(下篇)
编程式事务:在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务声明式事务:通过xml或者注解配置的方式达到事务控制的⽬的,叫做声明式事务
2023-06-12 20:21:26 896
原创 Java:107-Spring的底层原理(上篇)
横切逻辑代码:创建类和接口:创建工厂类BeanFactory:创建测试类:创建配置文件beans.xml:执行测试类的方法,若打印了说明操作成功(对应的userDao还没有进行注入(使用DI方式),只是操作了IOC的方式,DI还没有利用)现在开始我们将操作DI首先改变配置文件,修改如下:而修改读取配置文件的类之前,我们首先需要先执行一下,然后看看还是否打印,很明显他还是打印的,只是对应的配置没有获取而已,那么现在我们改变对应的读取配置文件的BeanFactory操作:然
2023-06-12 19:44:09 1018
原创 Java:106-Mybatis的底层原理
依赖:测试类:首先说明jdbc的问题:1:数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能2:Sql语句连接信息或者sql语句(他们简称为sql)在代码中有硬编码,造成代码不易维护,实际应用中sql变化的可能较大,sql变动需要改变java代码,比如说,如果使用配置文件存放,那么若代码有自动识别是否修改而改变的,那么改动即可,若没有,那么他一个配置是可以给多个类使用的,即我们只需要改动一次即可部署完毕,而由于一般我们都只会提交class文件,原来的还要继续编译(找源代码),而不能直接的
2023-04-08 21:11:59 444 1
原创 Java:104-JVM优化
我们可以选择在idea中查看对应的class文件:但是要注意:随着idea或者说jdk版本的不同,可能并不会出现这些东西或者少些或者有些不同,所以这里以上面的说明为主即可(我修改并整理的)比如我这里就是这样:Java 虚拟机采用基于栈的架构,其指令由操作码和操作数组成,这些 字节码指令 ,就叫作 opcode,其中,getstatic、ldc、invokevirtual、return 等,就是 opcode,可以看到是比较容易理解的,因为根据后面的说明就是一个完整的System.out.print
2023-02-25 20:40:41 837
原创 Java:103-并发编程详解(下篇)
针对问题4,有3种做法:1:不使用阻塞队列,只使用一般的线程安全的队列,也无阻塞/唤醒机制,当队列为空时,线程池中的线程 只能睡眠一会⼉,然后醒来去看队列中有没有新任务到来,如此不断轮询2:不使用阻塞队列,但在队列外部、线程池内部实现了阻塞/唤醒机制(比如当有任务时提醒你去执行),只是没有阻塞队列而已,只是在外面进行总体的阻塞,但他们还是执行的,相当于手动的阻塞调用线程或者阻塞处理线程,比较麻烦,因为要手动3:使用阻塞队列,没有就阻塞,有就释放很显然,做法3最完善,既避免了做法2中线程池内部自己实现
2023-02-09 12:10:12 445
原创 Java:102-并发编程详解(中篇)
特性2:层次Phaser多个Phaser可以组成如下图所示的树状结构,可以通过在构造方法中传入父Phaser来实现可以发现,在Phaser的内部结构中,每个Phaser记录了自己的父节点,但并没有记录自己的子节点列表,所 以,每个 Phaser 知道自己的父节点是谁,但父节点并不知道自己有多少个子节点,对父节点的操作,是通过子节 点来实现的树状的Phaser怎么使用呢?考虑如下代码,会组成下图的树状Phaser:这个64位(long的)的state变量被拆成4部分,下图为state变量各部分
2023-02-09 11:56:25 866
原创 Java:101-并发编程详解(上篇)
修饰一个方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象(即该关键字的参数,一般认为是this)修饰一个静态的方法:其作用的范围是整个静态方法,作用的对象是这个类的所有对象(因为没有this)修饰一个类:其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象(也就是代码块中的参数是类而已,比如类.class)6:CASCAS全称是Compare And Swap,即比较替换,是实现并发应用到的一种技术操作包含三个操作数:
2023-02-09 11:39:16 501
原创 Java:100-数据结构与算法(下篇)
单边循环法:单边循环法只从数组的一边对元素进行遍历和交换开始和双边循环法相似,首先选定基准元素pivot同时,设置一个mark指针指向数列起始位置, 这个mark指针代表小于基准元素的区域边界这里还是以第一个作为基准至此,单边和双边都操作完毕,他们实际上都是局部的进行操作,先进行分开,然后局部分开,所以使得除了他们自身的移动次数n外(整体来看就是n,因为无论你是否分开,判断的次数,只是从8到4+4而已),只需要操作logn次数即可,因为是分开的吗(前面已经说明过了)即:快速排序的时间复杂度是:
2022-12-14 16:53:24 1004
原创 Java:99-数据结构与算法(上篇)
代码也的确解决了对应的问题,我们可以发现,他的解决方式只是将自身依次的除以"2到自身减一"(包括2和自身减一)的所有数只要有一个的余数为0,就代表是质数我们发现,他的存储方式是赋值(数据结构),而解决问题的方式(算法)是利用循环操作但是在数字越来越大时,他的执行时间,可能会变慢,你可以试着将值修改成2147483647,会发现,明显变慢了接下来,我将使用一点数学知识或者说数学思维(虽然并不是很高大上,但也只是告诉你,数学的作用而已),来使得他进行优化即我们需要减少循环,那么我们继续分析质数,有什
2022-12-14 15:58:32 476
原创 Java:98-微服务项目的编写(下篇)
将配置文件后缀修改成yml,内容如下:对应的启动类:然后在启动类所在的包下,创建entity包,该包下,创建如下实体类:创建mapper.OrderDao接口:创建service.OrderService接口及其实现类:创建controller.OrderController类:至此,项目初步完成现在我们继续在entity包下,创建如下的类:然后到mapper包下创建如下接口:然后在OrderService接口里添加如下方法:然后对应的实现类里也添加如下:然后
2022-11-14 21:16:52 1020
原创 Java:97-微服务项目的编写(上篇)
创建子项目(子工程),服务中心edu-eureka-boot(7001):最终成果:修改配置文件后缀为yml,并加上如下:启动类:启动,然后启动好后,访问localhost:7001,若出现如下,则代表操作成功:在对应的启动类所在的包下(以后默认在启动类所在的包下创建,所以后面就不写了,基本只会给出开头提示一下)创建controller.AdController类(先不进行操作):然后再创建entity.PromotionAd类(先不进行操作):再创建mapper.AdDao接口
2022-11-14 21:12:59 883 2
原创 Java:96-MySQL高级
- 查看错误日志文件路径-- 慢查询日志文件路径-- bin log 日志文件 需要在 my.cnf 中配置log-bin=/var/log/mysql-bin/bin.log #最好只加上mysql-bin(代表开启)#否则可能需要很多配置(使得启动不了),我们只需要打开即可server-id=2 -- 记得唯一(主从之间唯一)-- 如果不加或者有相同的,那么同步的操作执行不了,比如如果不加,那么执行STOP SLAVE;就会报错-- 如果相同,那么对应的连接为NO(I/O线程那里)
2022-10-17 20:50:41 636
原创 Java:95-分库分表技术之ShardingJDBC
- "utf8"可以不加引号,反正不区分,相当于一个数(添加数据时需要加,那里是区分的)););#定义名称#定义起始路径#通常用来解决中文乱码,在88章博客有具体说明#解决bean重复问题,在89章博客有具体说明#开启驼峰命名匹配映射#定义名称#定义起始路径#通常用来解决中文乱码,在88章博客有具体说明#解决bean重复问题,在89章博客有具体说明#开启驼峰命名匹配映射# 定义数据源名称#如果出现相同的属性,那么在后面的覆盖前面的,虽然同时存在会报错。
2022-10-14 21:25:16 6470
原创 Java:94-分库分表技术之MyCat
对数据的各种操作也是愈加 的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求阿里数据中心内景(阿里、百度、腾讯这样的互联网巨头,数据量据说已经接近EB级)当我们多次的访问(无论是否是其他浏览器),那么都可以发现,会出现相同的编号,即服务器是维护一个类似于线程池的操作然后进行分配,所以我们看起来多个用户访问时,是同时访问的,但实际上是执行的太快导致的,他们都会抢夺空闲的线程当然,那么用户过多(超多),肯定会有影响的,当然可能也会扩展线程数量但我们通常会操作集群来处理,而不会让一台机器来
2022-10-14 21:22:51 968
原创 Java:92-Kafka详解
1 :人脸识别系统被调失败,导致图片上传失败 2 :延迟高,需要人脸识别系统处理完成后,再返回给客户端,即使用户并不需要立即知道结果 3 :图片上传系统与人脸识别系统之间互相调用,需要做耦合192.168 .164.11 node1 192.168 .164.12 node2 192.168 .164.13 node3 #具体ip根据自己设置的机器ip一致。
2022-10-06 10:19:48 1543
原创 Java:91-Lucene+ElasticSeach核心技术
第三步:创建启动类第四步:配置properties文件第五步:创建实体类对应的mapper接口:对应的service包下的类和实现类:测试类:对应的controller包下的类:可以启动测试,也可以使用测试类来测试创建索引:回到测试类,编写如下:所以可以看出,Field的确是Document里面的信息,且Document里面的信息以Field存储一般我们分词时,分词的对象是Field的域值,然后分好后,多出的term,代表分好的词和从那个分词对象的Field的名称的组
2022-09-27 21:21:02 1210
原创 Java:90-Docker详解
调试你的应用程序,而不是你的开发环境你可以跳过docker ps -a docker ps -all #两个效果一样 #如果加上-q,代表只显示对应的容器ID,即也可以操作多次的删除,与前面的docker rmi `docker images -q`一样的操作docker run .. . –v 宿主机目录(注意是目录,而不是文件) :容器内目录(注意是目录,而不是文件) .. .
2022-09-11 17:08:25 1504
原创 Java:89-Spring Cloud 微服务详解
案例工程:我们基于SpringBoot来构造工程环境,我们的工程模块关系如下所示:公共组件微服务(lagou-parent的子模块lagou-service-common):在公共组件微服务中引入数据库驱动及mybatis-plus:生成数据库实体类:在java资源文件下,创建com包,然后再在里面创建lagou包,然后再在里面创建common包,然后再在里面创建pojo包然后再在里面创建Products类,总体来说就是创建com.lagou.common.pojo.Products类除了
2022-09-07 16:55:47 360 2
原创 Java:77-Mybatis-Plus详解
如果是Spring MVC,那么对应的依赖就是:实际上Spring Boot也可以自己操作扫描,因为他也是一种方式而已,所以,我们也可以单独的操作其他框架只是Spring boot帮我们操作了而已,使得方便,而单独时如操作Spring,需要我们些配置文件或者注解(有其他方式,则自然可以使用其他方式),并操作才可所以上面的依赖,并不是绝对的必须是对应的依赖,虽然使用Spring Boot操作时,需要当然,若你创建Spring boot而不引入对应的依赖,那么自然,可以自己引入依赖来单独操作,这是可
2022-08-28 17:23:35 1021
原创 Java:76-SpringSecurity介绍
当然如果你没有学习spring boot,没有关系,可以到88章博客里面去学习,就知道为什么这样的操作了接下来我们运行启动类,访问http://localhost:8080/hello,即可得到返回的数据接下来整合SpringSecurity:添加SpringSecurity依赖重启Spring Boot启动类,再次访问http://localhost:8080/hello:出现如下:默认有访问/login,该/login会优先于写的controller的/login,即自己写的/login
2022-08-21 22:38:23 519
原创 Java:84-MongoDB高级介绍
*心跳检测:整个集群需要保持一定的通信才能知道哪些节点活着哪些节点挂掉mongodb节点会向副本集中的其他节点每两秒就会发送一次pings包如果其他节点在10秒钟之内没有返回就标示为不能访问每个节点内部都会维护一个状态映射表,表明当前每个节点是什么角色、日志时间戳等关键信息如果是主节点,除了维护映射表外还需要检查自己能否和集群中内大部分节点通讯如果不能,则把自己降级为secondary只读节点(即变成从)数据同步副本集同步分为初始化同步和keep复制。
2022-08-06 21:26:33 1049
原创 Java:83-MongoDB介绍
举例3:MongoDB是一个面向文档的数据库,目前由10gen(也可叫Mongo)开发并维护它的功能丰富,齐全,基本完全可以替代MySQL在使用MongoDB做产品原型的过程中,我们总结了MonogDB的一些亮点:使用JSON风格语法,易于掌握理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现相对于SQL来说,更加直观,容易理解和掌握Schema-less,支持嵌入子文档:Mongo
2022-08-06 21:05:02 1343
原创 Java:82-FastDFS详解
安装libevent(运行时需求) :对应需要的文件下载地址(后面需要的):链接:https://pan.baidu.com/s/1sYGezUM13XCeDtPHAZJcAQ提取码:alsk安装 libfastcommon:libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库上传 libfastcommon-master.zip 到 /opt编译:如果make.sh的权限不够,则需要授权(可执行的权利):安装:
2022-08-06 20:52:30 2605
原创 Java:88-Spring Boot详解
启动类操作:真正的启动类:至此,我们手动执行main方法,执行后,访问http://localhost:8080/hello/boot,发现返回了数据,那么操作成功我们可以看到,若是以前,我们需要web.xml中的前端控制器,而这里他帮我们配置好了因为无论是web.xml的操作还是这里,总体来说都是操作类只是以前的jar包操作不了web.xml而已(因为他在web项目对应的文件夹下),而只有资源文件夹下的才可以操作其他的基本直接忽略,如java文件夹下,若有xml文件,直接忽略,即其他的基本
2022-08-04 20:09:08 2362
原创 Java:87-分布式前端微信操作
如果不是vue的项目,可以直接引用官方提供的js文件,来生成二维码页面引入:在对应的前端找到Header.vue(上一章的前端项目)这里只会给出部分代码,需要自己去进行对比修改,由于是部分,对应的代码可能不是全的接下来点击对应的微信图标,那么就会出现二维码假设:如果对应的网站Scope权限没有开通或者scope的值不正确,那么会提示对应错误,这是该网站的问题具体可以百度,这里并没有问题当然对应的appid的值不正确或者redirect_uri的值不正确,也会出现对应的提示错误,他们都
2022-07-29 18:03:46 1923
原创 Java:86-分布式前端开发
经过上一章的后端开发后,接下来我们来操作前端开发,页面不需要我们自己开发,使用提供的页面即可对应的前端初始项目地址:链接:https://pan.baidu.com/s/1iFui2WbE1mfmHWnb9Z8oGg提取码:alsk运行项目 npm run serve接下来进行开发但要注意:这里只会给出部分代码,需要自己去进行对比修改(记得启动对应的后端,且没有的自然自己写)由于是部分,对应的代码可能不是全的可以使用ctrl+f进行查找,或者ctrl+d进行找到一样的(虽然从上到下,循环的,
2022-07-29 17:52:39 2016
原创 Java:85-分布式项目搭建
pom.xml:初始化数据库:对应的数据库设计文档和代码地址如下:链接:https://pan.baidu.com/s/14kHif51YkKXDgsyUBTOs8A提取码:alsk我们idea实际上也可以操作数据库,而不用使得我们进行来回切换如图:lagou-edu-dao项目:spring-dao.xml:对应生成的UserDao.xml进行修改,写成如下(多余的删除):将UserDao接口修改成如下:在测试目录下,创建类:进行测试,若成功,那么这里就操作完毕l
2022-07-18 16:03:44 2021
原创 Java:81-RabbitMQ详解
启动后台管理插件:启动RabbitMQ:查看进程:测试:关闭防火墙: systemctl stop firewalld(service可以省略)浏览器输入:http://ip:15672(ip是对应启动了rabbitmq服务器的ip),注意:要先启动,否则没有对应的页面没有对应页面返回的,浏览器自然显示找不到页面,请求的信息是浏览器读取自带的请求信息因为握手连接失败,即没有对应的服务器来操作请求默认帐号密码:guest,guest用户默认不允许远程连接,只能本地连接(会有提示),这是r
2022-06-28 11:09:31 1734
原创 Java:80-Redis详解
安装gcc(必须有网络),因为Redis 是使用 C 语言编写的:忘记是否安装过,可以使用 gcc -v 命令查看gcc版本,如果没有安装过,会提示命令不存在进入redis目录,进行编译(redis自带Makefile文件,所以可以直接进行编译,而不用我们生成Makefile文件):编译之后,开始安装:安装后的操作后台运行方式:redis默认不会使用后台运行,即当你启动redis时(在bin目录下,使用redis-server命令,启动)他会占用当前界面,所以也就不能在对应的命令行那里操
2022-06-28 10:45:14 958
原创 Java:79-Dubbo介绍
重命名:在/opt/zookeeper/这个目录上创建zkData和zkLog目录进入/opt/zookeeper/conf这个路径,复制一份 zoo_sample.cfg 文件并命名为 zoo.cfg编辑zoo.cfg文件,修改dataDir路径:启动Zookeeper:查看状态:注意:上面只是单机启动,若有集群的配置,注意进行注释服务提供方:一个空的maven项目提供一个服务接口即可服务方的pom.xml:各种依赖请严格按照下面的版本(因为不同的版本,可能会不兼容,后面
2022-06-11 17:17:51 842
原创 Java:78-Zookeeper介绍
重命名:配置修改:在/opt/zookeeper/这个目录上创建zkData和zkLog目录:进入/opt/zookeeper/conf这个路径,复制一份 zoo_sample.cfg 文件并命名为 zoo.cfg:编辑zoo.cfg文件,修改dataDir路径:操作Zookeeper:启动Zookeeper:QuorumPeerMain:是zookeeper集群的启动入口类(与java有关,所以需要jdk,启动后,有zookeeper的客户端了)是用来加载配置启动Quorum
2022-06-11 17:06:37 1184
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人