自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 第二章JavaWeb基础学习路线

Java语言是当前最流行的开发语言之一。它的风格十分接近C++语言,是一个纯粹的面向对象的程序设计语言。Java继承了C++语言面向对象技术的核心,舍弃了C++语言中复杂和一些容易出错的特性,并在内存管理方面得到了增强。web是指Internet 的图形、多媒体部分。万维网(环球网)(World Wide web)简称Web。Web 由众多Web 页组成。要浏览Web,可使用称为Web 浏览器的程序。参见“Internet”和“Web 页”。

2023-01-07 18:27:28 409

原创 算法和数据结构的基础知识

第一讲算法的时间和空间复杂度

2022-04-16 20:04:15 424

原创 JAVA基础知识学习总结

第一章初识JAVA

2022-03-31 23:14:27 617 3

原创 C语言题目代码总结解析

简单版三子棋实现实现的功能和总体结构概述目标 为了实现三子棋的游戏 game.h 头文件为了实现函数定义和符号定义 game.cpp实现程序所有需要的函数 test.cpp 实现程序的逻辑 void printCaiDan();//这个函数用来打印菜单 void Initarr(char arr[ROW][COW],int row,int cow);//这个函数用来初始化数组内容都为空格 void printQiPan(char arr[ROW][COW], int row, in..

2022-03-20 23:25:27 7013 5

原创 操作系统学习总结(下)

目录第六章虚拟存储器虚拟存储器概述常规存储器的特点局部性原理虚拟内存的定义和特征如何实现虚拟内存技术总结​第六章虚拟存储器虚拟存储器概述常规存储器的特点一次性 作业只有全部装入内存才能开始运行驻留性 作业被装入内存,整个作业都会一直驻留在内存中,其任何部分都不会换出,直到作业运行结束传统存储器的管理方式会对内存资源有极大的浪费,所以引入了虚拟存储器的概念局部性原理虚拟内存的定义和特征定义所谓虚拟存储器就是具有请求调入功能和...

2022-01-12 10:48:11 610

原创 操作系统学习总结(上)

第一章操作系统引论操作系统的目标1方便性,os的创建是为了方便用户去使用计算机硬件,没有os的计算机是非常难用的2有效性,两层含义,第一层是为了提高系统的资源利用率,第二层是为了提高系统吞吐量3可扩充性,os需要不停的进行更新,去满足更高的要求4开放性,就是os的设计要满足国际的标准,有利于互联操作系统的作用作为用户与计算机硬件系统之间的接口用户有三种方式通过os使用计算机1命令方式命令方式是允许用户直接使用1联机命令接口(用户说一句,计算机做一句)2脱

2021-12-24 12:39:59 1688 1

原创 File类与IO流

File:它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的。一个File对象代表硬盘中实际存在的一个文件或者目录。无论该路径下是否存在文件或者目录,都不影响File对象的创建。方法名说明通过将给定的路径名字符串转换为抽象路径名来创建新的File实例从父路径名字符串和子路径名字符串创建新的File实例。

2024-02-19 11:58:17 608

原创 第四章IDEA操作Maven

每次创建 Project 后都需要设置 Maven 家目录位置,否则 IDEA 将使用内置的 Maven 核心程序(不稳定)并使用默认的本地仓库位置。这么做很可能是类似这样的情况:比如基于 Maven 学习 SSM 的时候,做练习需要导入老师发给我们的代码参考。配置之后,IDEA 会根据我们在这里指定的 Maven 家目录自动识别到我们在 settings.xml 配置文件中指定的本地仓库。刚刚导入的 module 的父工程坐标还是以前的,需要改成我们自己的 project。

2023-11-05 00:17:59 736

原创 第五章Maven依赖的特性-进阶篇

配置大于编码约定大于配置参考示例中的如下部分:

2023-10-23 18:04:45 685

原创 第三章Maven依赖的特性-基础篇

- 通过自定义属性,统一指定Spring的版本 -->-- 自定义标签,维护Spring版本数据 -->真正实现“一处修改,处处生效”。

2023-10-23 17:58:48 183

原创 第二章Maven的使用

这样的格式虽然和我们 XML 配置文件中坐标的格式不同,但是本质上还是坐标信息,大家需要能够认识这样的格式,将来从 Maven 命令的日志或错误信息中看到这样格式的信息,就能够识别出来这是坐标。注意:如果在上一个工程的目录下执行 mvn archetype:generate 命令,那么 Maven 会报错:不能在一个非 pom 的工程下再创建其他工程。通过查看 war 包内的结构,我们看到被 Web 工程依赖的 Java 工程确实是会变成 Web 工程的 WEB-INF/lib 目录下的 jar 包。

2023-10-23 17:31:54 433

原创 第一章初识Maven与Maven安装配置——尚硅谷

一个 Maven 工程有约定的目录结构,约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须 能找到 Java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。修改配置的方式是:将。而实际上 jar 包之间的依赖关系是普遍存在的,如果要由程序员手动梳理无疑会增加极高的学习成本,而这些工作又对实现业务功能毫无帮助。而使用 Maven 则几乎不需要管理这些关系,极个别的地方调整一下即可,极大的减轻了我们的工作量。

2023-10-23 17:19:30 404

原创 初级篇—第八章精讲MySQL数据类型

说明:在存储的时候,FLOAT 和 DOUBLE 都存在精度损失的问题,很可能在比较值的时候,得到不正确的结果。由于 DECIMAL 数据类型的精准性,在我们的项目中,除了极少数(比如商品编号)用到整数类型外,其他的数值都用的是 DECIMAL,原因就是这个项目所处的零售行业,要求精准,一分钱也不能差。向TIMESTAMP类型的字段插入数据时,当插入的数据格式满足YY-MM-DD HH:MM:SS和YYMMDDHHMMSS时,两位数值的年份同样符合YEAR类型的规则条件,只不过表示的时间范围要小很多。

2023-10-15 23:42:06 112

原创 初级篇—第七章数据处理增删改

一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句在处理过程中 效率更高。INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。解决方式:使用 INSERT 语句向表中插入数据。

2023-10-15 23:41:33 165

原创 JS之同步异步promise、async、await

Promis就是对异步操作进行封装,其中的思想就是不希望你在回调函数中处理需要执行的代码,而是把回调执行的代码放入对应的区域也就是then()或catch()方法中处理,然后通过resolve()或reject()来调用。将代码分离后做的时链式的调用,你可以这样理解一个then或一个catch就是一个链条的连接点。一般有异步操作我们都要使用promise对异步操作进行封装,养成良好的习惯。

2023-10-12 22:27:43 972

原创 初级篇—第六章创建和管理表

【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。MySQL在执行建表语句时,将id字段的类型设置为int(11),这里的11实际上是int类型指定的显示宽度,默认的显示宽度为11。如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。否则,只能是一团乱麻,无从下手。

2023-10-01 01:30:17 167

原创 初级篇—第五章子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

2023-10-01 01:29:43 124

原创 初级篇—第四章聚合函数

聚合函数作用于一组数据,并对一组数据返回一个值聚合函数类型AVG()SUM()MAX()MIN()COUNT()count(*)count(字段)count(常数)COUNT(*)返回表中记录总数,适用于任意数据类型。返回107行COUNT(expr) 返回expr不为空的记录总数返回35行问题:用count(*),count(1),count(列名)谁好呢?其实,对于MyISAM引擎的表是没有区别的。这种引擎内部有一计数器在维护着行数。

2023-10-01 01:27:10 142

原创 初级篇—第三章多表查询

反例 :在某业务中,由于多表关联查询语句没有加表的别名(或表名)的限制,正常运行两年后,最近在某个表中增加一个同名字段,在预发布环境做数据库变更后,线上查询语句出现出1052 异常:Column ‘name’ in field list is ambiguous。你能看出与自然连接 NATURAL JOIN 不同的是,USING 指定了具体的相同的字段名称,你需要在 USING的括号 () 中填入要指定的同名字段。对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表的别名(或表名)进行限定。

2023-10-01 01:26:29 200

原创 初级篇—第二章SELECT查询语句

SQL是一种标准SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言, 与数据直接打交道 ,由 IBM 上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准,先后有 SQL-86 , SQL-89 , SQL-92 , SQL-99 等标准。SQL 有两个重要的标准,分别是 SQL92 和 SQL99,它们分别代表了 92 年和 99 年颁布的 SQL 标准,我们今天使用的 SQL 语言依然遵循这些标准。

2023-10-01 01:25:52 309

原创 初级篇—第一章初识数据库

MySQL 由于其体积小、速度快、总体拥有成本低,可处理上千万条记录的大型数据库,尤其是开放源码这一特点,使得很多互联网公司、中小型网站选择了MySQL作为网站数据库(Facebook,Twitter,YouTube,阿里巴巴/蚂蚁金服,去哪儿,美团外卖,腾讯)。information_schema是 MySQL 系统自带的数据库,主要保存 MySQL 数据库服务器的系统信息,比如数据库的名称、数据表的名称、字段名称、存取权限、数据文件 所在的文件夹和系统使用的文件夹,等等。等,除此以外还包括图形数据库。

2023-10-01 01:24:24 122

原创 第五章Docker

微服务似然具备各种各样的优势,但是服务的拆分通常给部署带来了很大的麻烦分布式系统中,依赖的组件非常多,不同组件之间部署时,往往会产生一些冲突在数百,数千台服务中重复部署,环境不一定一直一样,会遇到各种问题数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录一旦完成数据卷挂载,对容器的一切操作都会作用在对应的宿主机目录了。这样我们操作宿主机的/var/lib/docker/volumes/html目录,就等同于操作容器内的/usr/share/nginx/html目录了。

2023-09-04 21:42:51 943

原创 第四章网关

参数中是否有authorization,authorization参数值是否为admin如果同时满足则放行,否则拦截@Override// 1.获取请求参数// 2.获取authorization参数// 3.校验// 放行// 4.拦截// 4.1.禁止访问,设置状态码// 4.2.结束处理跨域:域名不一致就是跨域,主要包括:域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com。

2023-09-04 21:42:20 221

原创 第三章微服务配置中心

Nacos配置管理Nacos除了可以做注册中心,同样可以做配置管理来使用。当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。如何在nacos中管理配置呢?然后在弹出的表单中,填写配置信息:微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。但如果尚未读取app

2023-09-04 21:41:33 636

原创 第二张微服务的调用与注册

基本流程如下:拦截我们的RestTemplate请求http://user-service/user/1RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-serviceDynamicServerListLoadBalancer根据user-service到eureka拉取服务列表eureka返回列表,localhost:8081、localhost:8082IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081。

2023-09-04 21:40:41 661

原创 第一章初识微服务

单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件。

2023-09-04 21:39:30 838

原创 第十六章Java多线程常见模式

图中 Futures 就好比居民楼一层的信箱(每个信箱有房间编号),左侧的 t0,t2,t4 就好比等待邮件的居民,右侧的 t1,t3,t5 就好比邮递员。来进行通讯,所以生产者生产完数据之后不用等 待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取.在 Java 标准库中内置了阻塞队列 . 如果我们需要在一些程序中使用阻塞队列 , 直接使用标准库中的即可 .阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力.阻塞队列也能使生产者和消费者之间 解耦.

2023-07-03 10:49:02 114

原创 第十三章Java锁—进阶

全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架,及整个JUC体系的基石锁,面向锁的使用者(定义了程序员和锁交互的使用层API,隐藏了实现细节,你调用即可)加锁会导致阻塞、有阻塞就需要排队,实现排队必然需要队列同步器,面向锁的实现者(比如Java并发大神Douglee,提出统一规范并简化了锁的实现,屏蔽了同步状态管理、阻塞线程排队和通知、唤醒机制等。

2023-07-03 10:40:47 124

原创 第十四章线程工具类

这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。它要做的事情是,让一组线程到达一个屏障(也可以叫做同步点)时被阻塞,知道最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法。release(释放)实际上会将信号量的值加1,然后唤醒等待的线程。

2023-07-03 10:39:02 89

原创 第十二章线程池

我们的线程池中的线程就是对应的消费者,主线程是生产者,消费者从阻塞队列拿任务,主线程填入任务@FunctionalInterface // 拒绝策略 interface RejectPolicy < T > {什么是拒绝策略,如果当任务很多的时候,我们线程池处理不了,也就是我们的阻塞队列满了,这时候就需要对应的处理方法,这里的方法就是拒绝策略这里为什么要定义一个接口,我们知道不同的场景下需要不同的策略,如果我们写死在我们的阻塞队列,那么不符合开闭原则,也会有大量的if-else。

2023-07-03 10:37:04 562

原创 第十章Java对象布局

简单类对象的实例化过程1、在方法区加载类;2、在栈内存申请空间,声明变量P;3、在堆内存中开辟空间,分配对象地址;4、在对象空间中,对对象的属性进行默认初始化,类成员变量显示初始化;5、构造方法进栈,进行初始化;6、初始化完成后,将堆内存中的地址赋给引用变量,构造方法出栈;子类对象的实例化过程1、在方法区先加载父类,再加载子类;2、在栈中申请空间,声明变量P;3、在堆内存中开辟空间,分配对象地址;4、在对象空间中,对对象的属性(包括父类的属性)进行默认初始化;5、子类构造方法进栈;

2023-07-03 10:31:28 192

原创 第八章CAS策略

譬如AtomicInteger原子整型,可否有其他原子类型?比如AtomicBook、AtomicOrder*可以!丢入泛型中@Getter@ToStringint age;

2023-07-03 10:29:48 105

原创 第二章线程状态

线程之间可以互相sleep,互相yield。我们发现t2线程执行yield,让出CPU的使用权,t2线程只是让出CPU,但是下此调度什么线程,还是由我们的操作系统说的算,可能下次调用的还是t2线程(只不过是我们执行完输出这个语句,就把CPU让出去了),也有可能是t1线程,我们无法干涉,只是每次执行到t2线程,都会把CPU让出去,让t1线程执行的次数可能较多一点。,等待被调度选中,获得CPU的使用权,这种状态称为就绪态(万事俱备,只差CPU),当这个线程获得了CPU的使用权,那么就会从就绪态变为运行中。

2023-07-03 10:15:13 85

原创 第十一章详解synchronized锁升级

轻量级锁的获取轻量级锁是为了在线程近乎交替执行同步块时提高性能。主要目的:在没有多线程竞争的前提下,通过CAS减少重量级锁使用操作系统互斥量产生的性能消耗.说白了先自旋,不行才升级阻寨。升级时机:当关闭偏向锁功能或多线程竞争偏向锁会导致偏向锁升级为轻量级锁轻量级锁的加锁JVM会为每个线程在当前线程的栈帧中创建用于存储锁记录的空间,官方成为Displaced Mark Word。若一个线程获得锁时发现是轻量级锁,会把锁的MarkWord复制到自己的Displaced Mark Word里面。

2023-06-21 16:04:30 1424

原创 第九章ThreadLocal

从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量(都有自己的、独立初始化的变量副本)。ThreadLocal实例通常来说都是类型的,用于关联线程和线程上下文,使用它的目的是希望将状态(例如,用户ID或事务ID)与线程关联起来。在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。

2023-06-18 15:25:30 232

原创 第七章volatile详解

其中最核心的操作是在于我们的write操作,当我们从工作内存写到主内存的时候,会进行lock加锁操作,加锁后会清空其他线程工作内存变量的值,如果其他线程要使用该变量前必须重写从主内存加载值,当write完毕后,进行unlock进行解锁 ,这样就保证了可见性。内存屏障(也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作),:处理器在读屏障之后的读操作, 都在读屏障之后执行。

2023-06-13 18:39:45 1052

原创 第六章JMM内存模型

Java中普通的共享变量不保证可见性,因为数据修改被写入内存的时机是不确定的,多线程并发下很可能出现"脏读",所以每个线程都有自己的工作内存,线程自己的工作内存中保存了该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取,赋值等 )都必需在线程自己的工作内存中进行,而不能够直接读写主内存中的变量。根据上面的铺垫,我们Java也可以直接复用操作系统层面的内存模型。:对一个volatile变量的写操作先行发生于对这个变量的读操作,前面的写对后面的读是可见的,这里的后面同样是指时间上的先后。

2023-06-12 23:22:53 413

原创 第五章线程中断与等待唤醒机制

首先一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。其次在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制——中断。中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。

2023-06-12 23:21:43 253

原创 第四章Java锁—基础

指针指向monitor对象(也称为管程或监视器锁)的起始地址。每个对象都存在着一个monitor与之关联,当一个monitor被某个线程持有后,它便处于锁定状态。在Java虚拟机(HotSpot)中,monitor是由ObjectMonitor实现的,其主要数据结构如下(位于HotSpot虚拟机源码ObjectMonitor.hpp,C++实现的)

2023-06-12 23:19:17 608

原创 第三章Future与CompletableFuture

它实现了Future和Completion Stage接口阻塞的方式和异步编程的设计理念相违背,而轮询的方式会消耗无畏的CPU资源。因此,JDK8设计出CompletableFutureCompletableFuture提供一种观察者模式类似的机制,可以让任务执行完成后通知监听的一方。

2023-06-12 23:18:10 629

空空如也

空空如也

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

TA关注的人

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