哄哄Q_社区达人页

个人头像照片
哄哄Q
已加入开发者社区265

勋章 更多

个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
江湖新秀
江湖新秀

成就

已发布61篇文章
0条评论
已回答0个问题
0条评论
已发布0个视频
github地址

我关注的人 更多

技术能力

兴趣领域
擅长领域
技术认证

暂时未有相关云产品技术能力~

暂无个人介绍

暂无精选文章
暂无更多信息

2023年10月

  • 10.25 16:06:22
    发表了文章 2023-10-25 16:06:22

    Docker基本使用

    初识Docker 什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 应用部署的环境问题 大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题: 依赖关系复杂,容易出现兼容性问题 开发、测试、生产环境有差异 例如一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。 Docker解决依赖兼
  • 10.25 16:05:02
    发表了文章 2023-10-25 16:05:02

    Java中的线程

    线程与进程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器 等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等) 线程 一个进程之内可以分为一到多个线程。 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行 。 Java 中,线程作为
  • 10.25 16:03:30
    发表了文章 2023-10-25 16:03:30

    C++ 泛型编程与STL技术

    模板的概念 模板就是建立通用的模具,大大提高复用性 例如生活中的模板 一寸照片模板: PPT模板: 模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 函数模板 C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 函数模板语法 函数模板作用: 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。 语法: template<typename T> 函数声明或定义 1 2 解释: template — 声明创建模板 typename — 表面其后面的符号是一
  • 10.25 16:00:51
    发表了文章 2023-10-25 16:00:51

    因特网概述

    因特网概述 网络、互联网和因特网 网络(Network):是由若干结点(Node)和连接这些结点的链路(Link)组成的。例如下图所示,笔记本电脑是一个结点,台式电脑是一个结点,网络打印机是一个结点,而将他们互联起来的交换机也是一个结点。当然了,结点之间的互联还需要使用链路,可以是有线链路,也可以是无线链路。在本例中4个结点和三段电路就构成了一个简单的网络 多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因此,互联网是"网络的网络(Network of Networks)"。 我们几乎每天都在使用的因特网(Internet)是世界上最大的互联
  • 10.25 16:00:06
    发表了文章 2023-10-25 16:00:06

    计算机网络-物理层

    物理层的基本概念 在计算机网络中​用来连接各种网络设备的传输媒体,种类众多,大致可以分为两类: 导引型传输媒体 常见的有双绞线,同轴电缆,​光纤 非导引型传输媒体 常见的是微波通信,例如使用2.4G赫兹​和5.8g赫兹频段的WiFi 计算机网络体系结构中的物理层,‍‍就是要解决在各种传输媒体上传输比特0和1的问题,进而给数据链路层提供透明传输比特流的服务。‍‍所谓透明是指数据链路层看不见,也无需看见物理层究竟使用的是什么方法‍‍来传输比特0和1的,他只管享受物理层提供的比特流传输服务即可。 物理层为了解决在各种传输媒体上传输比特0和1的问题,主要有以下4个任务,​分别是: 机械特
  • 10.25 15:58:39
    发表了文章 2023-10-25 15:58:39

    计算机网络-网络层

    网络层概述 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输 如图所示,这些异构型网络,如果只是需要各自内部通信,他们只要实现各自的物理层和数据链入层即可,但是如果需要将这些异构型网络互连起来,形成一个更大的互联网,就需要使用网络层互联设备路由器。 需要说明的是为了简单起见,有时我们可以不用画出这些网络,而将他们看作是一条链路即可。 对于互联网而言,仅实现计算机网络体系结构中的物理层和数据链路层,是不能实现数据包在互联网中各网络之间传输的,要实现该功能,就要必须实现网络层,网络层需要解决以下主要问题: 向运输层提供怎么样的服务 寻址问题 路由选择问题 接下来我们一个个来
  • 10.25 15:57:13
    发表了文章 2023-10-25 15:57:13

    计算机网络-运输层

    运输层概述 这里我们对运输层进行概述,之前文章所介绍的计算机网络体系结构中的物理层,数据链路层以及网络层,他们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信, 如图所示,局域网1上的主机与局域网2上的主机,通过互联的广域网进行通信,网络层的作用范围是主机到主机,但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。 Ap是应用进程的英文缩写词,如何为运行在不同主机上的应用进程提供直接的通信服务,是运输层的任务,运输层协议又称为端到端协议,如图所示运输层的作用范围是应用进程到应用进程,也称为端到端。 接下来我们从计算机网络体系结构的角度来看运输层。
  • 10.25 15:56:03
    发表了文章 2023-10-25 15:56:03

    计算机网络-应用层

    应用层概述 应用层是计算机网络体系结构的最顶层,其功能是设计和建立计算机网络的最终目的,也是在计算机网络中发展最快的部分。从早期基于文本的应用,例如电子邮件、远程登录,文件传输,新闻组等到20世纪90年代,将因特网带入千家万户的万维网,再到当今流行的即时通信,p2p文件共享, 以及各种音视频应用,网络应用一直层出不穷。此外,计算设备的小型化和无处不在,宽带住宅接入和无线接入的日益普及和迅速发展,为未来更多的新型网络应用提供了广阔的舞台。 例如我们在浏览器的地址栏中输入某个网站的域名号,就可以访问该网站的内容,这就是推动因特网飞速发展的万维网应用。其相关的应用层协议为超文本传送协议HTTP。
  • 10.25 15:54:09
    发表了文章 2023-10-25 15:54:09

    JUC并发编程-共享模型无锁

    CAS 与 volatile CAS概述 CAS的全称是: Compare And Swap(比较再交换),它体现的一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性。 在JUC( java.util.concurrent )包下实现的很多类都用到了CAS操作 AbstractQueuedSynchronizer(AQS框架) AtomicXXX类 例子: 我们基于JMM内存模型进行说明 线程1与线程2都从主内存中获取变量int a = 100,同时放到各个线程的工作内存中 一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当旧的预期值A和内存值V相同时,将内存值修
  • 10.25 15:53:02
    发表了文章 2023-10-25 15:53:02

    JUC并发编程-共享模型不可变

    日期转换的问题 下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < 10; i++) { new Thread(() -> { try { log.debug("{}", sdf.parse("1951-04-21")); } catch (Exception e) { log.error("{}", e);
  • 10.25 15:50:58
    发表了文章 2023-10-25 15:50:58

    计算机系统概述

    操作系统的概念、功能和目标 熟悉的操作系统 计算机系统的层次结构 操作系统的概念 操作系统的功能和目标 作为系统资源的管理者 作为用户和计算机之间的接口 用户接口 举一个例子: 联机命令接口 脱机命令接口 程序接口:可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。 注意; 系统调用=系统调用命令=广义指令 GUI 总结一下: 作为最接近硬件的层次 本章总结: 操作系统的四个特征 并发 注意: 操作系统的并发性和并发这两个概念注意区别 并行指同一时刻有多个处理器在执行任务,真正意义上同
  • 10.25 15:39:51
    发表了文章 2023-10-25 15:39:51

    Java-多线程

    本章专题与脉络 我们之前学习的程序在没有跳转语句的情况下,都是由上至下沿着一条路径依次执行。现在想要设计一个程序,可以同时有多条执行路径同时执行。比如,一边游戏,一边qq聊天,一边听歌,怎么设计? 要解决上述问题,需要使用多进程或者多线程来解决。 相关概念 程序、进程与线程 程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。如:运行中的QQ,运行中的网易音乐播放器。 每个进程都有一个独立的内存空间,系统运行一个程序即是一个进程从创建、运行到消亡的过程。
  • 10.25 15:38:38
    发表了文章 2023-10-25 15:38:38

    Java动态代理

    代理模式 代理模式是常见的设计模式之一,Java我们通常通过new一个对象然后调用其对应的方法来访问我们需要的服务。代理模式则是通过创建代理类(proxy)的方式来访问服务,代理类通常会持有一个委托类对象,代理类不会自己实现真正服务,而是通过调用委托类对象的相关方法,来提供服务,所以其实我们调用的还是委托类的服务,但是中间隔了一个代理类。这么做是有好处的,我们可以在访问服务之前或者之后加一下我们需要的操作。例如Spring的面向切面编程,我们可以在切入点之前执行一些操作,切入点之后执行一些操作。这个切入点就是一个个方法。这些方法所在类肯定就是被代理了,在代理过程中切入了一些其他操作。 根据
  • 10.25 15:37:15
    发表了文章 2023-10-25 15:37:15

    Java-泛型

    本章专题与脉络 泛型概述 生活中的例子 举例1:中药店,每个抽屉外面贴着标签 举例2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签 举例3:家庭厨房中: Java中的泛型,就类似于上述场景中的标签。 泛型的引入 在Java中,我们在声明方法时,当在完成方法功能时如果有未知的数据需要参与,这些未知的数据需要在调用方法时才能确定,那么我们把这样的数据通过形参表示。在方法体中,用这个形参名来代表那个未知的数据,而调用者在调用时,对应的传入实参就可以了。 受以上启发,JDK1.5设计了泛型的概念。泛型即为“类型参数”,这个类型参数在声明它的类、接口或方法中,代表未知的某种通用
  • 10.25 15:35:17
    发表了文章 2023-10-25 15:35:17

    通过Debug探索SpringMVC执行过程

    对SpringMVC的理解 MVC:MVC是一种设计模式 MVC的原理图: M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity) V-View 视图(做界面的展示 jsp,html……) C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面) SpringMVC工作原理 springMVC是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是Struts2加上sring的整合,但是这里有一个疑惑就是,springMVC和spring是什么样的关系呢?这个在百度百科上有一个很好
  • 10.24 22:54:43
    发表了文章 2023-10-24 22:54:43

    设计模式概述、UML图、软件设计原则

    设计模式概述 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。 1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ra
  • 10.24 22:53:19
    发表了文章 2023-10-24 22:53:19

    【设计模式】五种创建者模式

    创建者模式 创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。 创建型模式分为: 单例模式 工厂方法模式 抽象工程模式 原型模式 建造者模式 单例设计模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式的结构 单例模式的
  • 10.24 22:51:34
    发表了文章 2023-10-24 22:51:34

    Spring框架核心功能实现

    概要 手写Spring启动以及扫描流程 手写getBean流程 手写Bean生命周期流程 手写依赖注入流程 手写BeanPostProcessor机制 手写Aop机制 Spring启动以及扫描流程实现 我们平时都是使用这两种方法获得spring容器,上面的是通过加载类路径上的配置文件来获得容器。下面的方式和上面的原理相同只不过是通过注解的形式去实现,我们传入的也是一个配置类的class文件,我们可以把这个文件类比成第一种方法中的xml文件,然后这个xml文件里的一个个标签都变成了注解。 基础环境搭建 首先搭建好基础环境: 我们的测试类: public class MySpringT
  • 10.24 22:49:20
    发表了文章 2023-10-24 22:49:20

    Redis-分布式锁

    分布式锁的基本原理和实现方式对比 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路 在分布式情况下有多个JVM,所以就有多个锁监视器,所以就存在有多个线程拿到锁,他们就会产生不互斥的情况,这也是我们为什么要使用分布式锁的原因。而从图中我们也可以看到分布式锁的原理:让多个微服务共用一个锁监视器,这样就不会有多把锁同时存在的情况。 那么分布式锁他应该满足一些什么样的条件呢? 可见性:多个线程都能看到相同的结果,注意:这个地方说的
  • 10.24 22:47:38
    发表了文章 2023-10-24 22:47:38

    Redis-秒杀优化、Redis消息队列、达人探店

    秒杀优化 异步秒杀思路 我们来回顾一下下单流程 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是否是一人一单 5、扣减库存 6、创建订单 在这六步操作中,又有很多操作是要去操作数据库的,而且还是一个线程串行执行, 这样就会导致我们的程序执行的很慢,所以我们需要异步程序执行,那么如何加速呢? 在这里笔者想给大家分享一下课程内没有的思路,看看有没有小伙伴这么想,比如,我们可以不可以使用异步编排来做,或者说我开启N多线程,N多个线程,一个
  • 10.24 22:25:23
    发表了文章 2023-10-24 22:25:23

    Redis-秒杀优化、Redis消息队列、达人探店

    秒杀优化 异步秒杀思路 我们来回顾一下下单流程 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是否是一人一单 5、扣减库存 6、创建订单 在这六步操作中,又有很多操作是要去操作数据库的,而且还是一个线程串行执行, 这样就会导致我们的程序执行的很慢,所以我们需要异步程序执行,那么如何加速呢? 在这里笔者想给大家分享一下课程内没有的思路,看看有没有小伙伴这么想,比如,我们可以不可以使用异步编排来做,或者说我开启N多线程,N多个线程,一个
  • 10.24 22:09:17
    发表了文章 2023-10-24 22:09:17

    Redis-用户关注、附近商户、用户签到、UV统计

    好友关注 关注和取消关注 针对用户的操作:可以对用户进行关注和取消关注功能。 实现思路: 需求:基于该表数据结构,实现两个接口: 关注和取关接口 判断是否关注的接口 关注是User之间的关系,是博主与粉丝的关系,数据库中有一张tb_follow表来标示: 注意: 这里需要把主键修改为自增长,简化开发。 FollowController //关注 @PutMapping("/{id}/{isFollow}") public Result follow(@PathVariable("id") Long followUserId, @PathVariable("isFollow"
  • 10.24 22:06:36
    发表了文章 2023-10-24 22:06:36

    内容管理-易错重难点

    项目的模块架构理解 在我们做项目之前首先要对项目的模块结构有一个基本的了解,放一张我做的结构图: 注意点: 我们将依赖版本管理和依赖管理分为两个工程,而不是放在一个工程中,这样的话可以子模块可以选择性的继承,而不会太重 parent工程:对整个项目的依赖包版本进行管理 base工程:提供基础类库、工具类库等(继承parent工程,从而也纳入版本管理) content工程是一个聚合工程,不需要依赖,所以我们让它继承于parent工程拿到依赖版本即可 在content微服务工程中,我们可以发现api工程和service工程都依赖于model工程,那么我们就不需要让api、service、m
  • 10.24 22:05:04
    发表了文章 2023-10-24 22:05:04

    Mybatis思维导图

    前置准备 既然要读MyBatis的源码,那么我们就要先弄清楚MyBatis的入口在哪。这里我们直接写一个标准的MyBatis使用程序,以此来寻找入口分析源码: //第一步:读取mybatis-config.xml配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //第二步:构建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputSt
  • 10.23 22:39:18
    发表了文章 2023-10-23 22:39:18

    MyBatis-动态代理、执行器与缓存

    概述 通过一条修改语句,我们来了解一下Mybatis的执行过程: 一般MyBatis在执行一条语句的时候会依次使用以下四个模块: 分别说下各个组件的作用 接口代理: 其目的是简化对MyBatis使用,底层使用动态代理实现。 Sql会话: 提供增删改查API,其本身不作任何业务逻辑的处理,所有处理都交给执行器。这是一个典型的门面模式设计。 执行器: 核心作用是处理SQL请求、事物管理、维护缓存以及批处理等 。执行器的角色更像是一个管理员,接收SQL请求,然后根据缓存、批处理等逻辑来决定如何执行这个SQL请求。并交给JDBC处理器执行具体SQL。 JDBC处理器:他的作用就是用于通过JDB
  • 10.23 22:37:27
    发表了文章 2023-10-23 22:37:27

    媒资管理-项目易错分析1

    模块整体认识 媒资管理模块主要负责以下几件事情: 上传图片 上传视频 处理视频 对需要转码处理的视频系统会自动对其处理,处理后生成视频的URL 处理视频没有用户界面,完全是后台自动执行 审核媒资 分为自动审核和人工审核 可调用第三方鉴别接口协助审核 绑定媒资 课程计划创建好后需要绑定媒资文件,比如:如果课程计划绑定了视频文件,进入课程在线学习界面后点课程计划名称则在线播放视频。 架构问题分析 当前要开发的是媒资管理服务,目前为止共三个微服务:内容管理、系统管理、媒资管理,如下图: 后期还会添加更多的微服务,当前这种由前端直接请求微服务的方式存在弊端,如果在前端对每个请求地址都配置绝对路径
  • 10.23 22:36:27
    发表了文章 2023-10-23 22:36:27

    媒资管理-项目易错分析2

    视频处理 视频编码和文件格式 什么是视频编码? 同时我们还要知道我们为什么要对视频进行编码,如果我们不编码我们的视频文件会变得非常庞大,而通过视频编码可以将我们的视频文件大小缩小为原来的十分之一、百分之一,亦或是千分之一。 首先我们要分清文件格式和编码格式: 文件格式:是指.mp4、.avi、.rmvb等 这些不同扩展名的视频文件的文件格式 ,视频文件的内容主要包括视频和音频,其文件格式是按照一 定的编码格式去编码,并且按照该文件所规定的封装格式将视频、音频、字幕等信息封装在一起,播放器会根据它们的封装格式去提取出编码,然后由播放器解码,最终播放音视频。 音视频编码格式:通过音视频的压
  • 10.23 22:34:29
    发表了文章 2023-10-23 22:34:29

    Redis-分布式缓存

    单机Redis存在的问题 单机的Redis存在四大问题: Redis持久化 Redis有两种持久化方案: RDB持久化 AOF持久化 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。 执行时机 RDB持久化在四种情况下会执行: 执行save命令 执行bgsave命令 Redis停机时 触发RDB条件时 1)save命令 执行下面的命令,可以立即执
  • 10.23 22:33:22
    发表了文章 2023-10-23 22:33:22

    Redis-多级缓存

    什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能: 浏览器访问静态资源时,优先读取浏览器本地缓存 访问非静态资源(ajax查询数据)时,访问服务端 请求到达Nginx后,优先读取Nginx本地缓存 如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat) 如果Redis查询未命中,则查询To
  • 10.23 22:31:57
    发表了文章 2023-10-23 22:31:57

    Redis-数据结构

    Redis 共有 5 种基本数据结构:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。 这 5 种数据结构是直接提供给用户使用的,是数据的保存形式,其底层实现主要依赖这 8 种数据结构:简单动态字符串(SDS)、LinkedList(双向链表)、Hash Table(哈希表)、SkipList(跳跃表)、Intset(整数集合)、ZipList(压缩列表)、QuickList(快速列表)。 Redis 基本数据结构的底层数据结构实现如下: Redis 3.2 之前,List 底层实现是 LinkedList 或者 ZipList。 Re
  • 10.23 22:30:52
    发表了文章 2023-10-23 22:30:52

    Redis最佳实践

    Redis键值设计 优雅的key结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id] 长度不超过44字节 不包含特殊字符 例如:我们的登录业务,保存用户信息,其key可以设计成如下格式: 这样设计的好处: 可读性强 避免key冲突 方便管理 更节省内存: key是string类型,(value)底层编码包含int、embstr和raw三种。 key是数值的情况下,使用int编码,把字符串直接当作一个数字去存储,较小存储空间 embstr在小于44字节使用,采用连续内存空间,内存占用更小。 当字节数大于44
  • 10.23 22:29:39
    发表了文章 2023-10-23 22:29:39

    操作系统之进程管理

    进程的定义、特征、组成、组织 进程的定义 PCB 是进程控制块(Process Control Block)的缩写,它是操作系统中用于管理进程的重要数据结构。 进程的组成 进程的组织 链接方式: 索引方式: 进程的特征 本章内容小结: 进程的状态与转换 进程的状态 三种基本状态: 另外两种状态: 创建态: 结束态: 进程状态的转换 本章小结: 进程控制 什么是进程控制 进程控制过程 如何实现进程控制 进程控制相关的原语 本章回顾: 进程通信 什么是系统资源? 系统资源包括: CPU: 中央处理器,
  • 10.23 22:28:07
    发表了文章 2023-10-23 22:28:07

    操作系统之内存管理

    内存的基础知识 什么是内存 因为cpu的处理速度很快,而外存的读取速度又很慢,所以我们就需要先加载到内存中,内存的读取速度比外存要快得多,如此实现更高效的处理 进程的工作原理 指令的工作原理 从X=X+1大致看一下指令的执行过程 指令的工作基于地址。每个地址对应一个数据的存储单元。 逻辑地址(相对地址)vs物理地址(绝对地址) 从写程序到程序运行—编译、链接、装入 不修改装入模块中的指令地址就直接装入内存的话: 也就是说只有当装入模块使用的内存从#0开始时,不修改装入模块中的指令地址才能行得通 装入的三种方式 绝对装入 这也叫就意味着这个程序
  • 10.23 22:26:34
    发表了文章 2023-10-23 22:26:34

    操作系统之文件管理

    文件管理初识 文件的属性 文件内部的数据如何组织起来? 文件之间应该如何组织起来? 操作系统应该向上提供哪些功能? 从上往下看,文件应该如何存放在外存? 其他需要由操作系统实现的文件管理功能 最后总结一下: 文件的逻辑结构 、 这里说一下随机访问和顺序访问: 随机访问(Random Access)是计算机存储介质的一种访问方式。它指的是存储介质可以以任意的、不连续的方式访问存储的每个地址。也就是说,随机访问允许直接访问存储介质的任意位置,不需要从开头逐个访问到需要的地址。 与随机访问相对的是顺序访问(Sequential Access),它要求从存
  • 10.22 22:08:00
    发表了文章 2023-10-22 22:08:00

    I/O管理

    I/O设备的基本概念和分类 I/O设备的分类 按使用特性分类 按传输速率分类 按信息交换单位分类 最后我们总结一下: I/O控制器 I/O设备的组成 机械部件 电子部件—I/O控制器的功能 I/O控制器的组成 I/O控制器的两种寄存器编址方式 最后总结一下: I/O控制方式 程序直接控制方式 完成一次读/写操作的流程图(以读操作为例) 下面以C语言代码和流程图来剖析,程序直接控制方式 中断驱动方式 由于程序直接控制方式CPU利用率低,忙等,所以提出了中断驱动方式。 DMA方式 虽然中断驱动方式解决了程序直接控制方
  • 10.22 22:06:41
    发表了文章 2023-10-22 22:06:41

    深入理解递归算法

    概述 定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller instances of the same problem. 比如单链表递归遍历的例子: void f(Node node) { if(node == null) { return; } print
  • 10.22 22:05:36
    发表了文章 2023-10-22 22:05:36

    基础数据结构

    数组 概述 定义 在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识 In computer science, an array is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key 因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如: int[] array = {1,2,3,4,5} 1 知道了数组的数
  • 10.22 22:03:09
    发表了文章 2023-10-22 22:03:09

    十大排序算法

    概述 排序算法可以分为: 内部排序:数据记录在内存中进行排序。 外部排序 :因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等,本文只涉及内部排序算法。 十种常见排序算法可以分类两大类别: 比较类排序 非比较类排序 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破 O(nlogn),因此也称为非线性时间比较类排序。在冒泡排序之类的排序中,问题规模为 n,又因为需要比较 n 次,所以平均时间复杂度为 O(n²)。在归并排序、快速排序之类的排序中
  • 10.22 22:01:52
    发表了文章 2023-10-22 22:01:52

    Nginx 反向代理

    Nginx反向代理概述 关于正向代理和反向代理,我们在前面的章节已经通过一张图给大家详细的介绍过了,简而言之就是正向代理代理的对象是客户端,反向代理代理的是服务端,这是两者之间最大的区别。 Nginx既可以实现正向代理,也可以实现反向代理。 我们先来通过一个小案例演示下Nginx正向代理的简单应用。 先提需求: (1)服务端的设置: http { log_format main 'client send request=>clientIp=$remote_addr serverIp=>$host'; server{ listen 80; server_name lo
  • 10.22 22:00:50
    发表了文章 2023-10-22 22:00:50

    Nginx 负载均衡

    负载均衡概述 早期的网站流量和业务功能都比较简单,单台服务器足以满足基本的需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也跟着越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器进行性能的水平扩展及避免单点故障出现。那么如何将不同用户的请求流量分发到不同的服务器上呢? 负载均衡的原理及处理流程 系统的扩展可以分为纵向扩展和横向扩展: 纵向扩展是从单机的角度出发,通过增加系统的硬件处理能力来提升服务器的处理能力 横向扩展是通过添加机器来满足大型网站服务的处理能力。 这里面涉及到两个重要的角色分别是"应用集群"和"负载均衡器": 应用集群:将同一应用
  • 10.22 21:59:10
    发表了文章 2023-10-22 21:59:10

    缓存集成

    缓存的概念 缓存就是数据交换的缓冲区(称作:Cache),当用户要获取数据的时候,会先从缓存中去查询获取数据,如果缓存中有就会直接返回给用户,如果缓存中没有,则会发请求从服务器重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据。 缓存其实在很多场景中都有用到,比如: 场景 作用 操作系统磁盘缓存 减少磁盘机械操作 数据库缓存 减少文件系统的IO操作 应用程序缓存 减少对数据库的查询 Web服务器缓存 减少对应用服务器请求次数 浏览器缓存 减少与后台的交互次数 缓存的优点 ​ 1.减少数据传输,节省网络流量,加快响应速度,提升用户体验; ​ 2.减轻
  • 10.22 21:57:55
    发表了文章 2023-10-22 21:57:55

    JDBC处理器StatementHandler

    回顾MyBatis的执行流程 MyBatis是一个基于JDBC的Dao框架,但前面我们提到的会话、执行器完全没有提到JDBC,原因是MyBatis把所有跟JDBC相关的操作全部都放到了StatementHandler中。 一个SQL请求会经过会话,然后是执行器,最由StatementHandler执行JDBC最终到达数据库。其关系如下图: 注意:我们前面说过在一次会话中SqlSession、Executer、StatementHandler的比例是1:1:N(这里的N取决于通过会话调用了多少次Sql)。即使在可重用执行器的情况下这个比例也是成立的,因为我们只要执行一次SQL就会对应一个
  • 10.22 21:56:44
    发表了文章 2023-10-22 21:56:44

    服务器端集群搭建、下载站点、用户认证模块

    Nginx实现服务器端集群搭建 Nginx与Tomcat部署 Nginx在高并发场景和处理静态资源是非常高性能的,但是在实际项目中除了静态资源还有就是后台业务代码模块,一般后台业务都会被部署在Tomcat,weblogic或者是websphere等web服务器上。那么如何使用Nginx接收用户的请求并把请求转发到后台web服务器? 步骤分析: 1.准备Tomcat环境,并在Tomcat上部署一个web项目 2.准备Nginx环境,使用Nginx接收请求,并把请求分发到Tomat上 1 2 环境准备(Tomcat) 浏览器访问: http://192.168.200.146:8080/
  • 10.22 21:55:18
    发表了文章 2023-10-22 21:55:18

    数据结构与算法之图论及其相关算法

    图的基本介绍 线性表局限于一个直接前驱和一个直接后继的关系,树也只能有一个直接前驱也就是父节点,当我们需要表示多对多的关系时, 这里我们就用到了图。 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图: 简单来说,图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为:G(V,E),其中,G 表示一个图,V 表示顶点的集合,E 表示边的集合。 然后我们说说图中的一些常见概念: 节点(Vertex):图中的基本元素,用于表示某个实体。 边(Edge):连接两个节点的线段,用于表示节点之间的关系。 度(Degree):
  • 10.21 16:59:47
    发表了文章 2023-10-21 16:59:47

    容器与Ben

    什么是容器? Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一种用于承载对象的容器,你可以配置你的每个 Bean 对象是如何被创建的,这些 Bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例,以及它们是如何相互关联构建和使用的。 如果一个 Bean 对象交给 Spring 容器管理,那么这个 Bean 对象就应该以类似零件的方式被拆解后存放到 Bean 的定义中,这样相当于一种把对象解耦的操作,可以由 Spring 更加容易的管理,就像处理循环依赖等操作。 当一个 Bean 对象被定义存放以后,再由 Spring 统一进行装配,这个过程包括 Bean 的初
  • 10.21 16:57:54
    发表了文章 2023-10-21 16:57:54

    AOP

    底层实现方式之一是代理,由代理结合通知和目标,提供增强功能 除此以外,aspectj 提供了两种另外的 AOP 底层实现: 第一种是通过 ajc 编译器在编译 class 类文件时,就把通知的增强功能,织入到目标类的字节码中 第二种是通过 agent 在加载目标类时,修改目标类的字节码,织入增强功能 作为对比,代理是运行时生成新的字节码 简单比较的话: aspectj 在编译和加载时,修改目标字节码,性能较高 aspectj 因为不用代理,能突破一些技术上的限制,例如对构造、对静态方法、对 final 也能增强 但 aspectj 侵入性较强,且需要学习新的 aspectj 特有语
  • 10.21 16:56:30
    发表了文章 2023-10-21 16:56:30

    深度理解SpringMVC

    控制器方法执行流程 我们知道RequestMappingHandlerAdapter一个重要的作用就是去执行控制器方法,而这个控制器方法就是下面的HandlerMethod ServletInvocableHandlerMethod +invokeAndHandle(ServletWebRequest,ModelAndViewContainer) HandlerMethod bean method WebDataBinderFactory ParameterNameDiscoverer HandlerMethodArgumentResolverComposite HandlerMethodR
  • 10.21 16:54:52
    发表了文章 2023-10-21 16:54:52

    SpringBoot的启动过程

    启动详解 SpringBoot的启动分为两个部分: 构造SpringApplication 执行run方法 构造SpringApplication 我们先来整体看看: 加入我们当前启动类如下: 可以发现大致做了以下几件事: 设置BeanDefinition的主源 推断应用类型 设置ApplicationContext 初始化器 设置监听器 推断著主启动类 接下来我们详细的看看每一个步骤: 第一步:记录 BeanDefinition 源 大家知道我们的Spring容器刚开始内部的BeanFactory是空的,它要从各个源头去寻找BeanDefinition, 这些源有可能来自
  • 10.21 16:53:21
    发表了文章 2023-10-21 16:53:21

    深度理解SpringBoot

    Tomcat内嵌容器 Tomcat 基本结构 Server └───Service ├───Connector (协议, 端口) └───Engine └───Host(虚拟主机 localhost) ├───Context1 (应用1, 可以设置虚拟路径, / 即 url 起始路径; 项目磁盘路径, 即 docBase ) │ │ index.html │ └───WEB-INF │ │ web.xml (servlet, filter,
  • 10.21 16:51:52
    发表了文章 2023-10-21 16:51:52

    一些值得注意的Spring细节

    FactoryBean FactoryBean是一个Factory对象,用于生成其他bean示例。当一个bean实现FactoryBean接口后,Spring容器调用其getObject方法返回该工厂所生成的bean,而不是该FactoryBean本身。但是工厂生成的产品对象只能说是一部分受到Spring容器的管理,我们来看看下面的例子: 我们把一个Bean1通过工厂Bean的方法纳入Spring管理,看看结果: Bean1: public class Bean1 implements BeanFactoryAware { private static final Logger
  • 发表了文章 2023-10-25

    Docker基本使用

  • 发表了文章 2023-10-25

    Java中的线程

  • 发表了文章 2023-10-25

    C++ 泛型编程与STL技术

  • 发表了文章 2023-10-25

    因特网概述

  • 发表了文章 2023-10-25

    计算机网络-物理层

  • 发表了文章 2023-10-25

    计算机网络-网络层

  • 发表了文章 2023-10-25

    计算机网络-运输层

  • 发表了文章 2023-10-25

    计算机网络-应用层

  • 发表了文章 2023-10-25

    JUC并发编程-共享模型无锁

  • 发表了文章 2023-10-25

    JUC并发编程-共享模型不可变

  • 发表了文章 2023-10-25

    计算机系统概述

  • 发表了文章 2023-10-25

    Java-多线程

  • 发表了文章 2023-10-25

    Java动态代理

  • 发表了文章 2023-10-25

    Java-泛型

  • 发表了文章 2023-10-25

    通过Debug探索SpringMVC执行过程

  • 发表了文章 2023-10-24

    设计模式概述、UML图、软件设计原则

  • 发表了文章 2023-10-24

    【设计模式】五种创建者模式

  • 发表了文章 2023-10-24

    Spring框架核心功能实现

  • 发表了文章 2023-10-24

    Redis-分布式锁

  • 发表了文章 2023-10-24

    Redis-秒杀优化、Redis消息队列、达人探店

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息