- 博客(166)
- 资源 (21)
- 收藏
- 关注
原创 第一章 项目简介&创建主窗体
WHY: 多个类中存在相同属性和行为时,(重复的代码)将这些内容抽取到单独一个类中,这个类就是父类,那么多个子类无需再定义这些属性和行为,只要 继承那一个类即可。如图所示:其中,多个类可以称为子类,单独那一个类称为父类超类(superclass)或者基类。继承描述的是事物之间的所属关系,这种关系是: is-a 的关系。例如,图中兔子属于食草动物,食草动物属于动物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。HOW: 子类 extends 父类。
2024-06-20 12:00:01
919
原创 nginx启动命令和停止命令
501 7114 6417 0 11:02上午 ttys001 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn nginx。注意:nginx被安装到的目录位置:/usr/local/Cellar/nginx。nginx配置文件位置:/usr/local/etc/nginx。4、查看nginx版本号。
2023-01-27 10:56:39
33377
1
原创 macos nginx 安装/卸载,启动/重启/关闭
在macos中使用homebrew安装 brew install nginx,卸载brew uninstall nginx。当前安装版本为1.21.5,安装路径为 /usr/local/Cellar/nginx。配置文件路径为/usr/local/etc/nginx/nginx.conf。nginx -s quit/stop/reload #退出/停止/重启。// 如果是默认位置的配置文件,可以简写为nginx -t。服务器默认路径为/usr/local/var/www。
2023-01-27 10:50:51
5053
原创 报错package xxx is not in GOROOT or GOPATH 或者 cannot find package “xxx“ in any of
问题描述:~/Documents/goproject/src/testproject01/main/unit5/demo09/crm/main » go run main.go kongfanyu@192main.go:6:8: package testproject01/main/unit5/demo09/crm/dbutils is not in GOROOT (/usr/local/go/src/testproject01/main/unit5/demo
2022-01-30 15:35:12
1500
原创 对1234四个数排列组合成无序且不重复的三位数
package com.interview07;/** * Copyright (C), 2018-2021 * FileName: Demo2 * Author: kongfanyu * Date: 2021/3/10 19:10 * 对1234四个数排列组合成无序且不重复的三位数 */public class Demo2 { public static void main(String[] args) { int line = 0; .
2021-03-10 19:25:04
1743
1
原创 HashMap常见面试题整理
HashMap有几种遍历方式?package com.interview.ujiuye10;import java.util.*;/** * Copyright (C), 2018-2021 * FileName: Demo2 * Author: kongfanyu * Date: 2021/2/3 16:43 */public class Demo2 { private static Map<String, String> map = new Ha.
2021-02-03 22:15:17
358
原创 filter、interceptor、aspect应如何选择?
目录前言Filter过滤器Interceptor拦截器Aspect切片总结前言大家应该听说过过滤器、拦截器、切面,印象上都能够起到截断拦截的作用,在做一些业务需求时,不知道如何选择,今天就来介绍一下他们之间的区别。Filter过滤器过滤器可以拦截到方法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出过滤操作。过滤器依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,一个过滤
2021-01-19 10:17:11
545
2
原创 03_Spring循环依赖
大厂面试题请谈谈Spring循环依赖?解释下Spring的三级缓存?三级缓存分别是什么?三个map有什么异同?什么是循环依赖?请你谈谈?看过Spring源码吗?一般我们说的spring容器是什么?如何检测是否存在循环依赖?实际开发中见过循环依赖的异常吗?多例的情况下,循环依赖问题为什么无法解决?什么是循环依赖多个bean之间相互依赖,形成一个闭环。比如:A依赖于B、B依赖于C、C依赖于A;通常来说,如果问Spring容器内部如何解决循环依赖,一定是指默认的单例Bean中,属性互相引用的场景
2021-01-19 09:47:12
217
1
原创 03_Spring的AOP执行顺序
AOP的常用注解@Before 前置通知:目标方法之前执行@After 后置通知:目标方法之后执行(始终执行)@AfterReturning:返回后通知,执行方法结束前执行(异常不执行)@AfterThrowing:异常通知,出现异常时候执行@Around:环绕通知,环绕目标方法执行面试题说说aop的全部通知顺序,SpringBoot或SpringBoot2对aop的执行顺序影响;说说你使用aop中碰到的坑;业务类接口CalcServicepublic interface CalcSe
2021-01-19 09:44:17
197
原创 02_AbstactQueuedSynchronizer之ReentantLock
简介Lock接口的实现类,基本都是通过【聚合】了一个【队列同步器】的子类完成线程访问控制的。public class ReentrantLock implements Lock, java.io.Serializable { //Lock接口的实现类 private static final long serialVersionUID = 7373984872572414699L; /** Synchronizer providing all implementation mechani
2021-01-19 09:42:40
128
原创 02_AbstactQueuedSynchronizer之AQS
先总字节跳动及其它大厂面试题说起ReentantLock实现原理,简单说一下AQS?synchronized的锁优化过程,详细说一下吧,偏向锁和轻量级锁有什么区别?前置知识公平锁和非公平锁可重入锁LockSupport自旋锁数据结构之链表设计模式之模板设计模式是什么字面意思抽象的队列同步器源代码public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer
2021-01-16 23:00:12
156
原创 02_可重入锁(递归锁)+LockSupport+AQS源码分析
题目说明可重入锁可重入锁(递归锁)①. 指的是同一线程外层函数获得锁后,再进入该线程的内层方法会自动获取锁 (前提,锁对象是同一个对象)类似于家里面的大门,进入之后可以进入厕所、厨房等②. Java中ReentranLock(显示锁)和synchronized(隐式锁)都是可重入锁,可重入锁的一个优点是可在一定程度避免死锁③. 隐式锁:(即synchronized关键字使用的锁)默认是可重入锁(同步块、同步方法)原理如下:掌握每个锁对象拥有一个锁计数器和一个指向持有该锁的线程的指针当
2021-01-16 22:52:40
285
原创 01_java字符串常量池
58同城的java字符串常量池面试题代码public class StringPools58Demo { public static void main(String[] args) { /* (1).str1 str1 会有4个对象 一个StringBuilder、 一个58 ldc、 一个tongcheng ldc、 String 这个
2021-01-16 22:47:25
150
原创 为啥需要RPC,而不是简单的HTTP?
一、七层网络结构模型:我们先来了解一下OSI的七层网络结构模型(虽然实际应用中基本上都是五层),它可以分为以下几层:(从上到下)第一层:应用层。定义了用于在网络中进行通信和传输数据的接口;第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;第四层:传输层。管理着网络中的端到端的数据传输;第五层:网络层。定义网络设备间如何传输数据;第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;第七层:物理层。
2021-01-16 22:34:28
1623
1
原创 什么是分布式锁
什么是分布式锁概述为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。为什么要使用分布式锁成员变量 A 存在 JVM1、JVM2、JVM3 三个 JVM 内存中成员变量 A 同时都会在 JVM 分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的不是同时发过来,三个请求分别操作三个不同 JVM 内存区域的数据,变量 A 之间不存在共享,也不具有可见性,处理的结果也是不对的注:该成员变量 A
2021-01-04 09:39:10
388
2
原创 Redisson实现分布式锁-由问题到程序
版本1案例@RestControllerpublic class IndexController { @Autowired private Redisson redisson; @Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/deductStock") public String deductStock() throws InterruptedExc
2021-01-04 09:21:13
285
1
原创 Redisson实现分布式锁
Redisson实现分布式锁(1)原理有关Redisson作为实现分布式锁,总的分3大模块来讲。1、Redisson实现分布式锁原理2、Redisson实现分布式锁的源码解析3、Redisson实现分布式锁的项目代码(可以用于实际项目中)本文只介绍Redisson如何实现分布式锁的原理。其它的会在接下来的博客讲,最后有关Redisson实现分布式锁的项目代码的博客中会放上项目源码到GitHub上。一、高效分布式锁当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如
2021-01-04 09:09:45
3851
原创 MySQL执行计划详解
一、前言当我们工作到了一定的年限之后,一些应该掌握的知识点,我们是必须需要去了解的,比如今天面试官问的SQL执行计划 当我们执行一条SQL的时候,可以直接对应的结果,但是你并不晓得,它会经历多深远黑暗的隧道,通过连接器、查询缓存、分析器、优化器、执行器重重筛选,才有可能展示到我们面前,有时候当你等待N长时间,但是展现的却是 timeout,这个时候想砸电脑的心都有了,不过当你看了今天的SQL执行计划后,你再也不用砸电脑了,看懂了这篇文章你就会知道这都不是事,让我们一起来揭晓这里面的奥妙在实际的应用场景中
2020-11-25 09:19:17
1217
原创 深入理解 Mysql 索引底层原理
本文一步一步推导出 Mysql 索引的底层数据结构。Mysql 作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是 Mysql 数据的存储形式以及索引的设计,决定了 Mysql 整体的数据检索性能。我们知道,索引的作用是做数据的快速检索,而快速检索实现的本质是数据结构。通过不同数据结构的选择,实现各种数据快速检索。在数据库中,高效的查找算法是非常重要的,因为数据库中存储了大量数据,一个高效的索引能节省巨大的时间。比如下面这个数据表,如果 Mysql 没有实现索引算法,那么
2020-11-23 14:46:25
180
原创 JUC线程框架深度解析-02、线程同步锁
JUC线程框架深度解析 — 02、线程同步锁juc的开发架构解决的核心问题是并发访问与数据安全操作问题,当进行并发访问的时候如果对于锁的控制不当,就会造成死锁这样的阻塞问题,那么为了解决这样的缺陷,juc里面重新针对锁的概念进行了设计。【 JUC锁机制 】➣ JUC锁机制包括有如下组成部分:➣ 核心接口:Lock、ReadWriteLock;➣ AQS抽象类:• AbstractOwnableSynchronizer(排它锁) ;AbstractQueuedSynchronizer(为实现依赖
2020-11-20 09:11:17
215
原创 JUC线程框架深度解析-01、juc基础
JUC线程框架深度解析-juc基础01、JUC基础使用一、JUC开发包简介【 java.util.concurrent开发包 】➣ 传统线程编程模型之中为防止死锁等现象的出现(wait()、notify()、synchronized)时往往会考虑性能、公平性、资源管理等问题,这样加重了程序开发人员的负担;➣ Java5.0添加了一个新的java.util.concurrent开发包(简称JUC)。利用此包进行的多线程编程将有效的减少竞争条件(race conditions)和死锁线程。【 j
2020-11-20 09:05:27
378
1
原创 第25章 JDBC核心技术第9节:Apache-DBUtils实现CRUD操作
第9章:Apache-DBUtils实现CRUD操作9.1 Apache-DBUtils简介commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。API介绍:org.apache.commons.dbutils.QueryRunnerorg.apache.commons.dbutils.ResultSetHandler工具类:org.
2020-11-19 09:40:58
125
原创 原创 第25章 JDBC核心技术第8节:数据库连接池
第8章:数据库连接池8.1 JDBC数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:在主程序(如servlet、beans)中建立数据库连接进行sql操作断开数据库连接这种模式开发,存在的问题:普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这
2020-11-19 09:38:40
150
转载 第25章 JDBC核心技术第7节:DAO及相关实现类
第7章:DAO及相关实现类DAO:Data Access Object访问数据信息的类和接口,包括了对数据的CRUD(Create、Retrival、Update、Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO作用:为了实现功能的模块化,更有利于代码的维护和升级。角色: 实体类(Dept)、接口(DeptDao)、实现类(DeptDaoImpl)、工具类(JdbcUtils)、BaseDao下面是项目中DAO使用的体现:层次结构:【手写BaseDao】packa
2020-11-19 09:35:42
148
原创 SpringBoot中使用 RabbitMQ
本章主要建立在已经安装好Erlang以及RabbitMQ的基础上,接下来,简单介绍一下使用一、Direct直接模式通过routingKey和exchange决定的那个唯一的queue可以接收消息1、首先到RabbitMQ的管理界面新建一个队列(Direct模式)2、测试项目的基础结构如下:这里为了方便测试,直接在父项目中建立两个子模块(生产者和消费者)3、pom.xml文件的依赖如下:父项目:<?xml version="1.0" encoding="UTF-8"?>&l
2020-11-15 23:33:57
9673
2
原创 RabbitMQ如何保证消息的可靠投递?
Spring Boot整合RabbitMQSpring有三种配置方式基于XML基于JavaConfig基于注解当然现在已经很少使用XML来做配置了,只介绍一下用JavaConfig和注解的配置方式RabbitMQ整合Spring Boot,我们只需要增加对应的starter即可 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b
2020-11-15 23:22:10
264
原创 10. RabbitMQ 应用与面试
10.1. 消息堆积当消息生产的速度长时间,远远大于消费的速度时。就会造成消息堆积。消息堆积的影响可能导致新消息无法进入队列可能导致旧消息无法丢失消息等待消费的时间过长,超出了业务容忍范围。产生堆积的情况生产者突然大量发布消息消费者消费失败消费者出现性能瓶颈。消费者挂掉解决办法排查消费者的消费性能瓶颈增加消费者的多线程处理部署增加多个消费者场景介绍在用户登录成功之后,会向rabbitmq发送一个登录成功的消息。这个消息可以被多类业务订阅。登录成
2020-11-15 23:19:13
182
原创 9. RabbitMQ高可用集群
9.1. RabbitMQ集群架构模式主备模式用来实现RabbitMQ的高可用集群,一般是在并发和数据不是特别多的时候使用,当主节点挂掉以后会从备份节点中选择一个节点出来作为主节点对外提供服务。远程模式主要用来实现双活,简称为Shovel模式,所谓的Shovel模式就是让我们可以把消息复制到不同的数据中心,让两个跨地域的集群互联。镜像队列模式镜像队列也被称为Mirror队列,主要是用来保证mq消息的可靠性的,他通过消息复制的方式能够保证我们的消息100%不丢失,同时该集群模式也是
2020-11-15 23:08:38
407
原创 8. RabbitMQ 集群
RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的。在实际使用过程中多采取多机多实例部署方式,为了便于同学们练习搭建,有时候你不得不在一
2020-11-15 22:58:56
354
原创 7. RabbitMQ 高级
7.1. 过期时间TTL 过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了之后消息将自动被删除。RabbitMQ可以对消息和队列设置TTL。目前有两种方法可以设置。第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。第二种方法是对消息进行单独设置,每条消息TTL可以不同。如果上述两种方法同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准。消息在队列的生存时间一旦超过设置的TTL值,就称为dead message被投递到死信队列,
2020-11-13 19:28:36
262
原创 6. Spring Boot整合RabbitMQ
6.1. 简介在Spring项目中,可以使用Spring-Rabbit去操作RabbitMQ https://github.com/spring-projects/spring-amqp尤其是在spring boot项目中只需要引入对应的amqp启动器依赖即可,方便的使用RabbitTemplate发送消息,使用注解接收消息。一般在开发过程中:生产者工程:application.yml文件配置RabbitMQ相关信息;在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定注入Rab
2020-11-13 19:15:38
128
原创 Thread类中join方法的实现原理
一.简介join()是Thread类的一个方法,根据jdk文档的定义,join()方法的作用,是等待这个线程结束,即当前线程等待另一个调用join()方法的线程执行结束后再往下执行。通常用于在main主线程内,等待其它调用join()方法的线程执行结束再继续执行main主线程。/*** Waits for this thread to die.**/public final void join() throws InterruptedException二.使用示例通过下面两个例子,我们来看
2020-11-12 11:07:56
673
2
原创 5. RabbitMQ工作模式
5.1. Work queues工作队列模式5.1.1. 模式说明Work Queues与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。应用场景:对于 任务过重或任务较多情况使用工作队列可以提高任务处理的速度。5.1.2. 代码WorkQueues与入门程序的简单模式的代码是几乎一样的;可以完全复制,并复制多一个消费者进行多个消费者同时消费消息的测试。1)生产者package com.kongfanyu.rabbitmq.work;import com
2020-11-12 10:56:42
427
2
原创 1. 消息中间件概述
1.1. 什么是消息中间件MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。为什么使用MQ 在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。开发中消息队列通常有如下应用场景:1、任务异步处理将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。2、应用程序解耦合MQ相当于一个中介,生产方通过MQ与消
2020-11-12 10:52:24
448
原创 JDK1.8 新特性
jdk1.8新特性知识点:Lambda表达式函数式接口方法引用和构造器调用Stream API接口中的默认方法和静态方法新时间日期API在jdk1.8中对hashMap等map集合的数据结构优化。hashMap数据结构的优化,原来的hashMap采用的数据结构是哈希表(数组+链表),hashMap默认大小是16,一个0-15索引的数组,如何往里面存储元素,首先调用元素的hashcode方法,计算出哈希码值,经过哈希算法算成数组的索引值,如果对应的索引处没有元素,直接存放,如果有对象在,那么
2020-11-12 10:30:41
461
原创 请用Java语言写出对List<Map<String,Object>>进行排序的函数
请用Java语言写出对List<Map<String,Object>>进行排序的函数,参数为String[] keys和String[] orders,即涉及排序的key和key对应的升序(ASC)或是降序(DESC).普通方法实现:package com.ujiuye.oop;import java.util.*;public class Demo4 { public static void main(String[] args) { M
2020-10-20 10:50:15
1021
原创 MySQL主从复制
MySQL主从复制原理搭建环境两台独立的CentOS7系统,安装MySQL5.7;保证可以正常运行并开启远程连接,具体安装过程参考上一篇博客。说明mysql的配置文件: windows下是my.ini, linux下是my.cnf; 在/etc目录下。主服务器简称master: 192.168.129.3,从服务器简称slave: 192.168.126.6。两台机子都可以互相ping同 / 关闭防火墙修改master配置文件[root@master etc]# vim my.cnf #
2020-09-24 15:41:58
123
SpringCloud Alibaba Nacos服务注册和配置中心.pdf
2020-08-12
Struts2 Spring3.0 Hibernate3.3 整合全注解配置
2011-07-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人