自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Deepin20-R7000开启显示器扩展

联想R7000的Deepin20系统开启显示器扩展深度论坛里我的问题贴基本信息机器配置:联想拯救者R7000 2020;CPU:AMD R7 4800h;独显:NVIDIA 1650出现的问题:系统安装时勾选了闭源的NVIDIA驱动,但是外接HDMI时,显示器无信号无法正常显示。百度教程,卸载了预装的闭源驱动,重装了NVIDIA网站上的最新驱动NVIDIA-Linux-x86_64-465.31。重启电脑后发现,HDMI可以显示了,但是笔记本的屏幕不能进入桌面了。安装NVIDIA官网驱动参考De

2021-05-27 11:29:54 1067

原创 Java-ThreadLocal

Java-ThreadLocalThreadLocal是JDK包提供的,它提供了线程本地变量,也就是如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题。每一个线程都有自己的ThreadLocal变量副本创建如下的测试类,其中有两个静态内部类,Account用于展示ThreadLocal和普通属性在多线程下的值的区别;MyThread用来验证ThreadLocal是线程独

2021-05-15 21:55:51 242

原创 Java-ThreadPoolExecutor使用

Java-ThreadPoolExecutor使用线程池主要由以下4个核心组件组成。线程池管理器:用于创建并管理线程池工作线程:线程池中执行具体任务的线程任务接口:用于定义工作线程的调度和执行策略,只有线程实现了该接口,线程中的任务才能被线程池调度任务队列:存放待处理的任务,新的任务将会不断被加入队列中,执行完成的任务将从队列中移除ThreadPoolExecutor如下是线程池的构造方法public ThreadPoolExecutor(int corePoolSize,

2021-05-12 20:36:35 281 2

原创 Java-String字符串的内存结构

Java-String字符串的内存结构本文参考自:公众号 程序新视界原文链接:https://mp.weixin.qq.com/s/jC3Gv3Fi0bo0d7rP5ngqpw字符串通常的创建方式有两种:new关键字创建通过引号直接赋值这两种形式的字符串创建在内存上是有区别的。使用引号直接赋值使用引号直接赋值创建字符串时,会先去常量池中查找该字符串是否已经存在,如果不存在的话先在常量池创建对象,然后返回引用地址;如果存在,则直接返回。使用new关键字创建使用new关键字创建字

2021-05-12 20:34:42 400 3

原创 Java-synchronized关键字

Java-synchronized关键字synchronized关键字用于为Java对象、方法、代码块提供线程安全的操作。synchronized关键字是一种独占式的悲观锁,同时属于可重入锁。上面的关键词:悲观锁:每次读取数据时都认为别人会修改数据,所以每次读写数据时都会加锁,这样导致其他线程想要读写这个数据时就会阻塞、等待直到获取锁。Java中的每个对象都有个monitor对象,加锁就是在竞争monitor对象。对代码块加锁是通过在前后分别加上monitorenter和monitorex

2021-05-04 22:49:47 153 2

原创 Java-反射获取Class对象执行的代码块

反射获取Class对象执行的代码块本篇主要分析四种获取Class的对象的方法,在执行时会调用对应Class的什么方法.Java中通常用来获取Class对象的方法如下:Class.forName("com.tianhao.luo.cl.AClassForName"):使用Java.lang.Class类的forName()方法创建AClassForName.class:类名.class创建cClassObject.getClass():对象.getClass()创建ClassLoader.get

2021-04-27 21:38:07 425

原创 开源项目-蘑菇博客搭建

文章目录蘑菇博客Centos7安装准备工作那就开始吧centos镜像安装centos启动虚拟机连接外网Centos环境配置1.yum仓库配置2.创建新用户boothost2.安装Docker3.安装docker-compose4.安装git5.安装jdk6.安装maven蘑菇博客代码地址:https://gitee.com/moxi159753/mogu_blog_v2Centos7安装下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/

2021-04-25 21:56:25 1897

原创 RocketMQ入门-源码启动Namesrv和Broker

RocketMQ源码启动Namesrv和Broker[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDhwKM7j-1619104340654)(C:%5Ctypora_pic%5C009-RocketMQ%E6%BA%90%E7%A0%81%E5%90%AF%E5%8A%A8%E9%A1%B9%E7%9B%AE%5Cimage-20210422223737414.png#pic_center)]本篇主要讲解内容包括:配置环境信息将RocketMQ源码中的namesrv

2021-04-22 23:16:07 613 1

原创 Java-JDK动态代理与CGLIB动态代理

JDK动态代理与CGLIB动态代理使用CGLIB时,需要在pom中引入依赖:<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.3.0</version></dependency>JDK动态代理要使用JDK动态代理必须要知道

2021-04-21 09:28:16 178

原创 RocketMQ入门-过滤消息

RocketMQ过滤消息通常情况下,生产者通过给消息设置topic和tag来添加基本的筛选条件,消费者通过订阅指定topic和tag时就能只接收这部分消息。但是,当需要再对指定topic和tag的消息进行过滤时,就需要使用SQL筛选表达式了。例如:下面的消息进行sql筛选------------| message ||----------| a > 5 AND b = 'abc'| a = 10 | --------------------> Gotten| b = 'a

2021-04-19 15:34:07 189

原创 RocketMQ入门-RocketMQ批量消息

RocketMQ批量消息批量发送消息能显著提高传递小消息的性能。限制是这些批量消息应该有相同的topic,相同的waitStoreMsgOK,而且不能是延时消息。此外,这一批消息的总大小不应超过4MB。Producer生产者发送消息调用的方法是:send(Collection<Message> msgs),与发送同步消息的区别是批量消息发送传入了一个消息的集合。待发送的消息有如下的限制条件:相同的topic相同的waitStoreMsgOK不能是延时消息public cl

2021-04-19 14:24:03 649 1

原创 Java-子父类初始化顺序

子父类初始化顺序Java基础知识科普:Java中的对象有两种类型:编译时类型和运行时类型。编译时类型指在声明对象时所采用的类型,运行时类型指为对象赋值所才采用的类型。在如下代码中,person对象的编译时类型为Person,运行时类型为Student,因此无法在编译时获取在Student类中定义的方法:Person person = new Student();原题背景:在头条上看到如下的一道题。请问输出的结果是什么?public class Test { static class

2021-04-18 22:17:07 391 2

原创 RocketMQ入门-RocketMQ延时消息

RocketMQ延时消息本篇基于RocketMQ集群开发,如需了解集群的搭建,可参考文章RocketMQ集群安装Producerpublic class SchedulerMessageProducer { public static void main(String[] args) throws Exception { // 1.指定生产者组 DefaultMQProducer defaultMQProducer = new DefaultMQProduce

2021-04-18 18:25:15 451

原创 RocketMQ入门-顺序消息

Rocket顺序消息顺序消息指按照消息发送的顺序(FIFO)消费。RocketMQ支持分区有序和全局有序。在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。当发送和消费参与的queue只有一个,则是全局有序;如果多个queue参与,则为分区有序,即相对每个queue

2021-04-18 12:41:56 245

原创 RocketMQ入门-RocketMQ的API学习

RocketMQ的API学习目标是对rocketMq的生产和消费消息掌握,熟悉异步同步两种方式。本篇基于RocketMQ集群开发,如需了解集群的搭建,可参考上一篇文章RocketMQ集群安装项目构建创建一个maven项目引入依赖,建议和服务端RocketMQ版本保持一致<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-cl

2021-04-16 17:14:30 222

原创 RocketMQ入门-搭建RocketMQ集群

RocketMQ集群安装在上一节*RocketMQ安装*中,已经安装成功了RocketMQ;现在需要将上一节的虚拟机复制两台出来,组件rocketMq的集群。Tips:复制后的虚拟机,先修改网络配置文件(vim /etc/sysconfig/network-scripts/ifcfg-ens33)中的IP地址(IPADDR),避免重复。我的集群hosts配置如下:一主两从192.168.15.14 rocketmq-master01192.168.15.15 rocketmq-slave0119

2021-04-14 23:33:55 185

原创 RocketMQ入门-安装RocketMQ

RocketMQ安装本安装操作基于Centos7环境准备1.准备JDK环境安装JDK环境不在此处进行描述了,详细请点击无外网环境搭建Jdk/Git/Maven/Docker2.准备RocketMQ下载请参考RocketMQ文档,详细点击链接,将压缩包上传至服务器。配置RocketMQ环境变量:创建临时目录并解压压缩包[root@localhost u01]# mkdir -p /u01/environment/rocketmq[root@localhost u01]# cd /u01

2021-04-14 23:31:04 323

原创 K8s入门-K8s节点notReady状态解决

K8s节点notReady状态解决挂掉原因:我想要通过externalIP来发布一个service,同时要删除旧的pod,删除命令执行后,节点就不可用了。错误操作复现创建externalIP类型的service将已有的deployments/demo的节点置为0(这一步有大问题)删除已有的pod节点(直接卡死,之后node节点全部断掉了)[root@k8s-master01 ~]# kubectl apply -f services-externalip-demo.yaml service

2021-04-01 23:47:09 6311 2

原创 K8s学习-Docker启动失败

Docker启动失败背景:在学习k8s集群时,不知道什么原因导致了node节点的状态变为了notReady,于是重启了虚拟机,重启之后就发现无法启动kubelet了。伏笔:在之前的K8s文章中学习docker搭建镜像仓库时,编辑了/etc/docker/daemon.json文件问题排查-journalctl -xefu kubelet划重点:journalctl -xefu kubelet命令可以查看kubelet的运行日志。使用journalctl -xefu kubelet命令看kubele

2021-04-01 22:01:59 3725 1

原创 K8s入门-应用编排命令实践

K8s应用编排本篇内容以每一步的命令为标题,加深对命令及作用的印象。kubectl create deploymentkubectl create deployment可以直接创建Deployment控制器对象,它生成pod模板之后,可以编排pod对象,但需要用户以–image选项指定要使用的容器镜像。可以使用--dry-run={none|client|server}选项用于测试运行,并不真正执行资源对象的创建过程。也可以添加-o yaml来以yaml格式输出api对象信息。[root@k8s-

2021-03-30 09:58:37 980

原创 K8s-kubectl命令

Kubectl [command][TYPE] [NAME] [flags]command:对资源执行相应操作的子命令,例如get、create、delete、run等;TYPE:要操作的资源类型,例如pods、services等;类型名称大小写敏感,但支持使用单数、复数或简写格式。NAME:要操作的资源对象名称,大小写敏感;省略时,则表示指定TYPE的所有资源对象;同一类型的资源名称可于TYPE后同时给出多个,也可以直接使用TYPE/NAME的格式来为每个资源对象分别指定类型。flags:命令行

2021-03-29 16:54:48 374

原创 Java后端-Postman发布后端接口

准备工作:POSTMAN Version 8.0.9客户端一个可用的电子邮箱导出已有api数据(适用于已有api但未登录Postman)点击设置2. 点击data并导出登录Postman若无账号自行注册点击登录,已有登录记录会保存在浏览器中登录成功后,点击workspace;能看见操作的记录发布接口已有api文件使用上面导出的数据再重新导入,点击设置按钮,切换到data页签下,导入json文件下面实际操作新建项目并补充接口信息并发布创建项目文件夹集合,并

2021-03-29 16:18:26 505 1

原创 MyBatis入门-MyBatis脏数据的产生和避免

MyBatis脏数据的产生和避免二级缓存虽然能提高应用效率,减轻数据库服务器的压力,但是如果使用不当,很容易产生脏数据。脏数据的产生MyBatis的二级缓存是和命名空间绑定的,所以通常清空下每一个Mapper映射文件都有自己的二级缓存,不同Mapper的二级缓存互不影响。在常见的数据库操作中,多表联合查询非常多,由于关系型数据库的设计,使得很多时候需要关联多个表才能获取想要的数据。在关联多表查询时肯定会将该查询放到某个命名空间下的映射文件中,这样一个多表的查询缓存就存在该命名空间的二级缓存中。涉及这

2021-03-29 15:35:00 734 2

原创 MyBatis入门-一级和二级缓存

MyBatis缓存配置使用缓存的好处是1.更快地获取数据2.避免频繁的数据库交互。一般提到MyBatis缓存的时候,都是指二级缓存。一级缓存(也叫本地缓存)默认会启用,并且不能控制。MyBatis全局配置<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3

2021-03-25 23:14:49 89

原创 MyBatis入门-高级结果映射

MyBatis高级结果映射本篇文章主要介绍association和collection标签的用法嵌套结果映射和嵌套查询映射介绍-一对一映射一对一映射因为不需要考虑是否存在重复数据,使用简单,可以直接使用MyBatis自动映射。实践-自动映射要求一个用户对应一个角色,类定义如下public class SysUser implements Serializable { private static final long serialVersionUID = 854674092994

2021-03-24 11:02:08 322

原创 Docker入门-构建Apache镜像

Docker构建Apache镜像本篇主要介绍apache镜像的构建使用DockerHub镜像1.创建工作目录,准备Dockerfile文件及index.html[root@localhost docker]# mkdir apache[root@localhost docker]# cd apache/[root@localhost apache]# vim Dockerfile[root@localhost apache]# vim public-html[root@localhost a

2021-03-23 17:40:00 289

原创 Docker入门-为镜像添加SSH服务

为镜像添加SSH服务本篇主要介绍基于ubuntu镜像来创建提供ssh服务的镜像,创建的方式基于commit命令使用Dockerfile创建基于commit命令Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像。命令格式为docker commit CONTAINER[REPOSITORY[:TAG]]1.首先,获取ubuntu:18.04镜像,并创建一个容器:[root@localhost docker]# docker pull ubunt

2021-03-23 16:01:50 347

原创 Docker入门-Dockerfile文件指令

Dockerfile创建镜像本文主要包括:Dockerfile文件指令Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。介绍-基本结构Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。一般而言,Dockerfile主体内容分为四部分:基础镜像信息维护者信息镜像操作指令容器启动时执行指令介绍-指令说明Dockerfile中指令的一般格式为INSTRUCTIONarguments,包括“配置指令”(配置镜像信息

2021-03-23 11:19:18 187

原创 Docker入门-端口映射

Docker端口映射本篇主要介绍-p属性-P属性介绍-从外部访问容器应用当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P(大写的)标记时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口:[root@localhost ~]# docker run -d -P halm-front:1.08b8cd502cde636210bf0f0d3b04a8c16a9a636373da39f50fc4a8e74031da0

2021-03-22 22:42:45 447

原创 Docker入门-数据卷/数据卷容器

Docker数据管理容器中的管理数据主要有两种方式:数据卷(Data Volumes):容器内数据直接映射到本地主机环境;数据卷容器(Data VolumeContainers):使用特定容器维护数据卷。介绍-数据卷数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。数据卷可以提供很多有用的特性:数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;对数据卷内数据的修改会立马生效,无论是容器内

2021-03-22 21:01:29 172

原创 Docker入门-使用registry镜像创建私有仓库

Docker搭建本地私有仓库本篇主要介绍使用registry镜像创建私有仓库并上传镜像使用registry镜像创建私有仓库默认情况下,仓库会被创建在容器的/var/lib/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到/u01/learn/docker/registry/目录。此时,在本地将启动一个私有仓库服务,监听端口为5000.docker run -d -p 5000:5000 -v /u01/learn/docker/regis

2021-03-22 17:22:47 254

原创 MyBatis入门-association标签使用

MyBatis高级结果映射本篇主要介绍association一对一查询介绍-一对一映射一对一映射因为不需要考虑是否存在重复数据,使用简单,可以直接使用MyBatis自动映射。实践-自动映射要求一个用户对应一个角色,类定义如下public class SysUser implements Serializable { private static final long serialVersionUID = 854674092994608168L; ..... priva

2021-03-22 16:36:19 7276 1

原创 Docker入门-docker容器常用命令

Docker容器操作本篇主要介绍docker容器常用命令。容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。介绍-新建容器docker create可以使用docker [container] create命令新建一个容器[root@localhost bin]# docker create -it halm-front:1.0f8ced3d93f0c9d430fac2

2021-03-21 11:02:26 519

原创 Docker入门-docker镜像常用命令

Docker常用命令本篇主要内容:docker的常用命令介绍docker pulldocker imagesdocker tagdocker inspectdocker historydocker searchdocker rmidocker image rmdocker image prunedocker commitdocker importdocker builddocker savedocker loaddocker push介绍-查看日志如果服务工作

2021-03-19 23:56:10 230

原创 MyBatis入门-动态SQL

MyBatis动态SQL本篇内容:五个标签介绍:if,choose(when、otherwise),trim(where、set)、foreach、bindOGNL(Object-Graph Navigation Language)表达式介绍介绍-if标签if的主要用处:WHERE语句中,通过判断参数值来决定是否使用某个查询条件UPDATE/INSERT语句中通过判断是否更新/插入一个字段实践-WHERE中用if要求:当只输入用户名时,需要根据用户名进行模糊查询;当只输入邮箱时,根

2021-03-19 10:57:25 247

原创 MyBatis入门-Mapper接口动态代理

MyBatis中Mapper接口动态代理实现原理本篇内容:了解到为什么Mapper接口没有实现类却能够被正常调用实践-无参数自定义代理类,该对象有sqlSession和mapper两个属性,sqlSession执行mapper中的方法交给代理方法来实现。InvocationHandler:当程序使用反射为指定接口生成动态代理对象,这个动态代理对象的实现类实现了一个或多个接口。动态代理对象就需要实现一个或多个接口里定义的所有方法。当执行动态代理对象里的方法时,实际上会替换成调用Invocatio

2021-03-18 15:26:01 164

原创 MyBatis入门-多个接口参数的用法

MyBatis中多个接口参数的用法本篇内容mapper接口中参数的类型mapper接口参数传递给xml,xml如何获取参数值@param注解的作用介绍-参数类型mapper接口中的参数类型为:基本类型JavaBeanmapper中的参数只有一个且为基本类型时,sql语句中只会使用一个参数。当参数是一个JavaBean类型时,它再xml文件中对应的sql语句会有多个参数。业务中,经常会遇到多个参数(少量)的情况,若将参数合并到一个JavaBean中和分别创建JavaBean都不太方

2021-03-18 11:03:55 117

原创 MyBatis入门-delete用法

MyBatis中delete用法本篇内容delete标签基本使用实践-删除一条记录mapper /** * 根据主键删除 * @param user 用户记录 * @return 执行得sql影响得行数 */ int deleteById(SysUser user);xml<!--通过主键删除--> <delete id="deleteById"> delete from mybatis

2021-03-18 11:02:12 6426

原创 MyBatis入门-update用法

MyBatis中update用法本篇内容update标签的基本用法实践-更新一条记录mapper中接口 /** * 根据主键更新 * @param user 用户记录 * @return 执行得sql影响得行数 */ int updateById(SysUser user);xml,update标签里,在createTime和headImg两个属性上也可以添加jdbcType的类型 <!--通过主键修改数据-->

2021-03-18 11:01:18 19882

原创 MyBatis入门-insert标签介绍及使用

insert用法本篇介绍了insert标签属性及作用属性列#{xxx,jdbcType=nnnn}中jdbcType的作用实现主键自增的两种方式介绍-insert标签insert标签包含的属性:id:命名空间中的唯一标识符,可用来代表这条语句parameterType:即将传入语句参数的完全限定类别或别名。因为MyBatis可以推断出传入语句的具体参数,因此不建议配置flushCache:默认值为true,任何时候只要语句被调用,都会清空一级缓存和二级缓存timeout:设置在抛出

2021-03-17 22:44:01 4167

空空如也

空空如也

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

TA关注的人

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