Java
文章平均质量分 90
java杂谈
风起猿涌
这个作者很懒,什么都没留下…
展开
-
【LeetCode】科学的刷题顺序
滑动窗口类型 双指针类型 快慢指针类型 区间合并类型 循环排序 链表翻转 树的广度优先遍历 树的深度优先遍历 双堆类型 回溯法 二分进阶 Top-K 多路归并 0/1 背包问题 拓扑排序 ...原创 2021-03-31 16:41:24 · 753 阅读 · 0 评论 -
Java的Future机制详解
Java的Future机制详解一、为什么出现Future机制常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其原创 2020-08-13 00:21:22 · 634 阅读 · 0 评论 -
java并发编程
一、并发编程灵魂拷问 如果一个局部变量,是否有线程安全的问题? 局部变量是线程安全的,因为局部变量是在虚拟机栈中的,是线程私有的,所以一定是线程安全的。 如果是一个共享变量呢? 共享变量每次个线程都可以访问并修改,存在线程安全的问题,所以线程不安全。 如果一个共享变量只有读,没有修改,是否线程安全? 没有修改,我认为可以视作线程安全。因为线程安全的定义:多线程访问同一代码,不会产生不确定的结果。只有读的话,得到的结果都是一样的,所以可以认为是线程安...原创 2020-08-06 15:50:37 · 237 阅读 · 0 评论 -
Java的Future机制详解
一、为什么出现Future机制常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。(因为可以异步获得执行结原创 2020-08-06 15:48:10 · 718 阅读 · 0 评论 -
回顾Java创建线程的几种方式
1)继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方法体就是现场执行体 public void run() { for原创 2020-08-06 15:46:11 · 142 阅读 · 0 评论 -
【大白话系列】-- AOP实战
本文主要介绍如何优雅的在Spring Boot中使用自定义注解,AOP切面统一打印出入参日志一. 首先看看切面日志输出效果:从上图中可以看到,每个对于每个请求,开始与结束一目了然,并且打印了以下参数: URL: 请求接口地址; Description: 接口的中文说明信息; HTTP Method: 请求的方法,是 POST, GET, 还是 DELETE 等; Class Method: 被请求的方法路径 : 包名 + 方法名; IP: 请求.原创 2020-08-06 15:42:07 · 623 阅读 · 1 评论 -
【大白话系列】-- 过滤器 && 拦截器
客户端一个请求传入到后端后的执行顺序:过滤器(处理request) -> 拦截器(处理request) -> 处理业务 -> 过滤器(处理response) -> 拦截器(处理response)故我们首先得了解过滤器和拦截器:过滤器配置见:configuration/FilterConfiguration拦截器配置见:configuration/WebMvcConfigurer首先明确过滤器和拦截器的不同: 过滤器和拦截器触发时机不一样,过滤器是..原创 2020-08-06 14:55:45 · 247 阅读 · 0 评论 -
【大白话系列】-- zookeeper
一、Zookeeper是什么?ZooKeeper主要服务于分布式系统,可以看做一个分布式协调系统,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。上面的解释有点抽象,简单来说zookeeper = 文件系统+监听通知机制。二、Zookeeper数据结构ZooKeeper的数据结构,跟Unix文件系统非常类似,可以看做是一颗树,每个节点叫做ZNode。每一个节点可以通过路径来标识,结构图如下:ZooKeeper原创 2020-08-06 14:51:11 · 380 阅读 · 0 评论 -
【大白话系列】-- 消息队列MQ
【大白话系列】-- 消息队列C-3创建:卢鹏, 最后修改:卢鹏06-09 19:10一、为什么使用消息队列?解耦、异步、削峰一个主流的电商系统,一个完整的下单流程包括:下单、支付、优惠券、积分、短信等等流程。这么长的链路不可能顺序执行,这样效率太低,所以我们需要同时做。所以最常用的方法:异步1.1 异步如1.2 中的图,当下单的流程完成,其他比如优惠券、积分等同步进行,这样大大节省了时间。1.2 解耦说到异步,首先最简单的方法就是使用线程去实现。一个业务就调用一个接口..原创 2020-07-22 17:57:15 · 312 阅读 · 0 评论 -
【大白话系列】-- 服务雪崩、限流、降级、熔断
服务雪崩微服务化产品线,每一个服务专心于自己的业务逻辑,并对外提供相应的接口,看上去似乎很明了,其实还有很多的东西需要考虑,比如:服务的自动扩充,熔断和限流等,随着业务的扩展,服务的数量也会随之增多,逻辑会更加复杂,一个服务的某个逻辑需要依赖多个其他服务才能完成。一旦一个依赖不能提供服务很可能会产生雪崩效应,最后导致整个服务不可访问。微服务之间往往采用rpc或者http调用,我们一般都会设置调用超时,失败重试等机制来确保服务的成功执行,但即使如此,如果不考虑服务的熔断和限流,那就是雪崩的源头。举例:原创 2020-07-21 20:35:22 · 677 阅读 · 0 评论 -
【大白话系列】-- ThreadLocal
1、ThreadLocal是什么?首先,他本质是一个数据结构,有点像HashMap,可以保存 key:value 键值对,但是不同的是,ThreadLocal只能保存一对键值对。ThreadLocal基本用法:ThreadLocal<String> localName = new ThreadLocal();localName.set("小王");String name = localName.get();既然他叫ThreadLocal,那肯定跟线程有关,他最重要的特性就是原创 2020-07-17 19:45:54 · 216 阅读 · 0 评论 -
Git拉取、推送、合并远程分支
Git拉取和推送指南Git基础入门建议教程:廖雪峰Git教程下面简单梳理下自己在开发中的一些流程:软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。 拉取代码(拉取master) git clone xxxx 新人最初在阅读代码或者初步了解代码时,建议 git clone,而不是直接Download。原创 2020-05-20 11:50:32 · 2514 阅读 · 0 评论 -
【大白话系列】HTTP和RPC
HTTP:超文本传输协议RPC:远程过程调用 首先说明什么是RPC? RPC是指远程过程调用,也就是说两台服务器A,B。一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,但是由于两个应用程序不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。 HTTP和RPC的区别 只要是远程调用都可以叫RPC,不管通过什么方式,所以: 其实HTTP就是一种RPC,HTTP通过一定的方法去调用HTTP服务器的某个procedure,执行完以后把.原创 2020-05-18 21:13:56 · 575 阅读 · 0 评论