自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 企业场景篇

工厂(factory)处理创建对象的细节,一旦有了SimpleCoffeeFactory,CoffeeStore类中的orderCoffee()就变成此对象的客户,后期如果需要Coffee对象直接从工厂中获取即可。这样也就解除了和Coffee实现类的耦合,同时又产生了新的耦合,CoffeeStore对象和SimpleCoffeeFactory工厂对象的耦合,工厂对象和商品对象的耦合。后期如果再加新品种的咖啡,我们势必要需求修改SimpleCoffeeFactory的代码,违反了开闭原则。

2023-09-03 23:00:21 146

原创 JVM虚拟机篇

好的,你再详细介绍一下程序计数器的作用?嗯,是这样的~~Java虚拟机对于多线程是通过线程轮流切换并且分配线程执行时间。在任何的一个时间点上,一个处理器只会处理执行一个线程,如果当前被执行的这个线程它所分匹配的执行时间用完了【挂起】。处理器会切换到另外的一个线程上来进行执行。并且这个线程的执行时间用完了,接着处理器就会又来执行被挂起的这个线程。这时候程序计数器就起到了关键作用,程序计数器在来回切换的线程中记录它上一次执行的行号,然后接着继续向下执行。你能给我详细地介绍Java堆吗?好的~

2023-08-31 11:28:41 325

原创 并发编程篇

什么是AQS?是多线程中的队列同步器。是一种锁机制,它是作为一个基础框架使用的,像ReentrantLock、Semaphore都是基于AQS实现的AQS内部维护了一个先进先出的双向队列,队列中存储的排队的线程在AQS内部还有一个属性state,这个state就相当于是一个资源,默认是0(无锁状态),如果队列中的有一个线程修改成功了state为1,则当前线程就相当于获取了资源在对state修改的时候使用的cas操作,保证多个线程修改的情况下原子性。

2023-08-28 17:25:12 179

原创 常见集合篇

集合原理分析

2023-08-24 16:24:02 137

原创 消息中间件篇

消息中间件

2023-08-20 13:24:38 1032

原创 微服务篇

Spring Cloud 5大组件有哪些?早期我们一般认为的Spring Cloud五大组件是随着SpringCloudAlibba在国内兴起,我们项目中使用了一些阿里巴巴的组件。

2023-08-19 17:09:27 1240

原创 框架篇

框架

2023-08-15 10:39:21 154

原创 MySQL篇

mysql

2023-08-13 21:32:05 206

原创 Redis篇

redis

2023-08-12 16:22:07 375

原创 Maven高级

Web开发讲解完毕之后,我们再来学习Maven高级。其实在前面的课程当中,我们已经学习了Maven。我们讲到Maven 是一款构建和管理 Java 项目的工具。经过前面 10 多天 web 开发的学习,相信大家对于 Maven 这款工具的基本使用应该没什么问题了。我们掌握了 Maven 工具的基本使用之后,其实对于一些简单的项目的构建及管理基本上就没什么问题了。但是如果我们需要开发一些中大型的项目,此时仅凭我们前面所学习的 Maven 的基础知识就比较难以应对了。

2023-08-02 09:28:16 71

原创 AOP面向切面编程

什么是AOP?AOP英文全称:Aspect Oriented Programming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。那什么又是面向方法编程呢,为什么又需要面向方法编程呢?来我们举个例子做一个说明:比如,我们这里有一个项目,项目中开发了很多的业务功能。然而有一些业务功能执行效率比较低,执行耗时较长,我们需要针对于这些业务方法进行优化。那首先第一步就需要定位出执行耗时比较长的业务方法,再针对于业务方法再来进行优化。

2023-08-01 14:26:30 81

原创 事务管理

我们接着继续学习@Transactional注解当中的第二个属性propagation,这个属性是用来配置事务的传播行为的。什么是事务的传播行为呢?就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。例如:两个事务方法,一个A方法,一个B方法。在这两个方法上都添加了@Transactional注解,就代表这两个方法都具有事务,而在A方法当中又去调用了B方法。

2023-08-01 11:23:37 97

原创 全局异常处理

上述错误信息的含义是,dept部门表的name字段的值 就业部 重复了,因为在数据库表dept中已经有了就业部,我们之前设计这张表时,为name字段建议了唯一约束,所以该字段的值是不能重复的。此时,我们可以看到,出现异常之后,异常已经被全局异常处理器捕获了。我们打开浏览器,访问系统中的新增部门操作,系统中已经有了 “就业部” 这个部门,我们再来增加一个就业部,看看会发生什么现象。而此时,大家会发现,网络请求报错了。状态码为500,表示服务器端异常,我们打开idea,来看一下,服务器端出了什么问题。

2023-08-01 09:18:11 103

原创 登录认证

在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。这是不安全的,所以我们今天的主题就是登录认证。最终我们要实现的效果就是用户必须登录之后,才可以访问后台系统中的功能。什么是会话?在我们日常生活当中,会话指的就是谈话、交谈。在web开发当中,会话指的就是浏览器与服务器之间的一次连接,我们就称为一次会话。在用户打开浏览器第一次访问服务器的时候,这个会话就建立了,直到有任何一方断开连接,此时会话就结束了。

2023-07-31 11:37:12 226

原创 案例

案例需求及开发规范说明部门查询、删除、新增、修改员工查询PageHelper分页插件删除员工新增员工文件上传阿里云OSS修改员工yml配置文件参数配置化前言1前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来,我们就通过一个案例,来将前端开发、后端开发、数据库整合起来。 而这个案例呢,就是我们前面提到的Tlias智能学习辅助系统。

2023-07-28 09:59:53 223 1

原创 SpringBoot MyBatis

在前面我们学习MySQL数据库时,都是利用图形化客户端工具(如:idea、datagrip),来操作数据库的。在客户端工具中,编写增删改查的SQL语句,发给MySQL数据库管理系统,由数据库管理系统执行SQL语句并返回执行结果。增删改操作:返回受影响行数查询操作:返回结果集(查询的结果)我们做为后端程序开发人员,通常会使用Java程序来完成对数据库的操作。Java程序操作数据库,现在主流的方式是:Mybatis。什么是MyBatis?MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。

2023-07-26 15:44:50 1976

原创 SpringBootWeb请求响应

在上一次的课程中,我们开发了springbootweb的入门程序。基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。其实呢,是我们在浏览器发起请求,请求了我们的后端web服务器(也就是内置的Tomcat)。而我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tomcat中的Controller接收,然后Controller再给浏览器一个响应,响应一个字符串 “Hello World”。

2023-07-26 11:32:50 174

原创 SpringBootWeb入门

下面我们将进入SpringBoot基础阶段的学习。在没有正式的学习SpringBoot之前,我们要先来了解下什么是Spring。我们可以打开Spring的官网(),去看一下Spring的简介:Spring makes Java simple。Spring的官方提供很多开源的项目,我们可以点击上面的projects,看到spring家族旗下的项目,按照流行程度排序为:Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。

2023-07-25 15:27:48 123 1

原创 Maven基础

学习完前端Web开发技术后,我们即将开始学习后端Web开发技术。做为一名Java开发工程师,后端Web开发技术是我们学习的重点。后端Web开发技术的学习,我们会先学习Java项目的构建工具:MavenMaven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。

2023-07-25 14:46:01 76

原创 ElementUI

ElementUIElementUI概述ElementUI快速入门ElementUI常用组件ElementUI案例Vue路由Vue项目打包部署1. Vue组件库Element1.1 Element介绍不知道同学们还否记得我们之前讲解的前端开发模式MVVM,我们之前学习的vue是侧重于VM开发的,主要用于数据绑定到视图的,那么接下来我们学习的ElementUI就是一款侧重于V开发的前端框架,主要用于开发美观的页面的。Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站

2023-07-24 14:05:14 2111 2

原创 Vue

VueVue概述Vue常用指令Vue案例Vue生命周期异步Axios前后端分离前端工程化Vue脚手架1. Vue1.1 Vue概述通过我们学习的html+css+js已经能够开发美观的页面了,但是开发的效率还有待提高,那么如何提高呢?我们先来分析下页面的组成。一个完整的html页面包括了视图和数据,数据是通过请求 从后台获取的,那么意味着我们需要将后台获取到的数据呈现到页面上,很明显, 这就需要我们使用DOM操作。正因为这种开发流程,所以我们引入了一种叫做MVVM(Model

2023-07-21 13:32:40 87

原创 JavaScript

JavaScriptJavaScript基础语法函数内置对象BOMDOMJavaScript事件1. JavaScripthtml完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习JavaScript,这门语言会让我们的页面能够和用户进行交互。1.1 介绍通过代码/js效果演示提供资料进行效果演示,通过浏览器打开,我们点击主题5按钮,页面的主题发生了变化,所以js可以让我们的页面更加的智能,让页面和用户进行交互。1.2 引入方式同样,

2023-07-20 11:48:47 194

原创 HTML和CSS

HTMLHTML概述HTML快速入门开发工具VSCodeHTML基础标签HTML表单标签CSSCSS介绍CSS引入方式CSS选择器和属性1. HTML & CSS1). 什么是HTML ?**HTML: **HyperText Markup Language,超文本标记语言。超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。标记语言:由标签构成的语言HTML标签都是预定义好的。例如:使用 h1 标签展示标题

2023-07-17 18:22:44 87

原创 数据库优化

在实际的业务开发中,有些业务操作要多次访问数据库。一个业务要发送多条SQL语句给数据库执行。需要将多次访问数据库的操作视为一个整体来执行,要么所有的SQL语句全部执行成功。如果其中有一条SQL语句失败,就进行事务的回滚,所有的SQL语句全部执行失败。简而言之:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。事务作用:保证在一个事务中多次操作数据库表中数据时,要么全都成功,要么全都失败。事务简介。

2023-07-17 16:03:46 77

原创 数据库操作

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。查询关键字:SELECT查询操作是所有SQL语句当中最为常见,也是最为重要的操作。在一个正常的业务系统中,查询操作的使用频次是要远高于增删改操作的。当我们打开某个网站或APP所看到的展示信息,都是通过从数据库中查询得到的,而在这个查询过程中,还会涉及到条件、排序、分页等操作。#建议:创建新的数据库use db04;-- 部门表。

2023-07-12 15:13:37 233

原创 线程同步

虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。弊端:当线程很多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。创建三个Thread类的对象,把SellTicket对象作为构造方法的参数,并给出对应的窗口名称。线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。同步静态方法的锁对象是什么呢?

2023-07-12 10:08:40 54

原创 线程安全问题

出现这个问题的原因是,我们创建的每个线程执行到sleep()语句之后就放弃了cpu的使用权。等到它睡醒之后,它照样还是会往下执行, 不会管其它票的数量已经减少了。从上面的例子可以看到, 有被重复卖出去的票,还有第-1,0张票,出现了线程安全问题。因为线程卖出了重复的票和不存在的票。

2023-07-12 10:08:21 48

原创 数据库设计

前面我们讲解了DDL中关于数据库操作的SQL语句,在我们编写这些SQL时,都是在命令行当中完成的。没有任何代码提示。(全靠记忆,容易敲错字母造成执行报错)操作繁琐,影响开发效率。(所有的功能操作都是通过SQL语句来完成的)编写过的SQL代码无法保存。在项目开发当中,通常为了提高开发效率,都会借助于现成的图形化管理工具来操作数据库。

2023-07-12 10:08:01 292

原创 数据库基础

在我们讲解SpringBootWeb基础知识(请求响应案例)的时候,我们讲到在web开发中,为了应用程序职责单一,方便维护,我们一般将web应用程序分为三层,即:Controller、Service、Dao。之前我们的案例中,是这样子的请求流程:浏览器发起请求,先请求Controller;Controller接收到请求之后,调用Service进行业务逻辑处理;Service再调用Dao,Dao再解析user.xml中所存储的数据。

2023-07-12 09:58:49 74

原创 Thread类常用方法

Thread类常用方法方法说明start()开启线程,start是通过线程来调用run方法run()不是在run方法实现线程的逻辑,而是thread.run(),这个run方法是直接调用了线程中的runyield()暂停当前线程,并执行其他线程sleep()使当前线程由运行状态变成阻塞状态,若睡眠时其他线程调用了interrupt方法,会导致sleep抛出异常InterruptExceptionjoin()保证当前线程在其他线程开始时会结束int

2023-07-11 09:05:58 50

原创 多线程的创建

假如计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的。独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。run():封装线程执行的代码,直接调用,相当于普通方法的调用。线程:是进程中的单个顺序控制流,是一条执行路径。因为run()是用来封装被线程执行的代码。

2023-07-11 09:05:31 51

原创 动态代理

切记一点:代理可以增强或者拦截的方法都在接口中,接口需要写在newProxyInstance的第二个参数里。在这个故事中,经济人作为代理,如果别人让邀请大明星去唱歌,打篮球,经纪人就增强功能。对add方法进行增强,对remove方法进行拦截,对其他方法不拦截也不增强。但是如果别人让大明星去扫厕所,经纪人就要拦截,不会去调用大明星的方法。无侵入式的给方法增强功能。动态代理,还可以拦截方法。3,利用代理调用方法。

2023-07-11 08:47:43 50

原创 注解

自定义注解单独存在是没有什么意义的,一般会跟反射结合起来使用,会用发射去解析注解。针对于注解,只要掌握会使用别人已经写好的注解即可。关于注解的解析,一般是在框架的底层已经写好了。

2023-07-11 08:46:57 49

原创 反射

​是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。​通俗的理解:(掌握)利用反射创建的对象可以无视修饰符调用类里面的内容可以跟配置文件结合起来使用,把要创建的对象信息和方法写在配置文件中。读取到什么类,就创建什么类的对象读取到什么方法,就调用什么方法此时当需求变更的时候不需要修改代码,只要修改配置文件即可。

2023-07-11 08:46:06 48

原创 单元测试

对部分代码进行测试。

2023-07-11 08:45:23 44

原创 网络编程

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程在网络通信协议下,不同计算机上运行的程序,可以进行数据传输。

2023-07-11 08:44:50 1594

原创 并发、并行、线程状态

Java中线程的状态分为6种。

2023-07-11 08:44:10 49

原创 线程池

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢?Java中的线程/* 新建 */ NEW , /* 可运行状态 */ RUNNABLE , /* 阻塞状态 */ BLOCKED , /* 无限等待状态 */ WAITING , /* 计时等待 */ TIMED_WAITING , /* 终止 */ TERMINATED;} // 获取当前线程的状态 public State getState() {

2023-07-11 08:43:48 44

原创 线程通信

概述生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。所谓生产者消费者问题,实际上主要是包含了两类线程:​ 一类是生产者线程用于生产数据​ 一类是消费者线程用于消费数据为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为Object类的等待和唤醒方法方法名说明。

2023-07-11 08:43:13 49

原创 日志技术

新建lib文件夹,把jar粘贴到lib文件夹当中,全选后右键点击选择add as a …不是java的,也不是自己写的,是第三方提供的代码,所以我们要导入jar包。检测导入成功:导入成功后jar包可以展开。在项目重构界面可以看到导入的内容。跟输出语句一样,可以把程序在运行过程中的详细信息都打印在控制台上。利用log日志还可以把这些详细信息保存到文件和数据库中。把第三方的代码导入到当前的项目当中。把配置文件粘贴到src文件夹下。ALL:输出所有日志。OFF:关闭所有日志。在代码中获取日志对象。

2023-07-10 08:42:08 37

空空如也

空空如也

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

TA关注的人

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