自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jerry1ee

Despacito...

  • 博客(58)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java工程师春招复习提纲(基础)

Java基础部分JVM虚拟机Java运行时数据区域和内存模型内存布局以及特点OOM异常、Stackoverflow异常的场景垃圾收集算法、分代理论、常见GC场景、可达性分析、常见垃圾收集器Java内存模型类文件结构了解即可类加载机制类加载时机和类的生命周期类加载过程(加载、验证、准备、解析、初始化)类加载器、双亲委派模型、Java模块化Java内存模型与线程J...

2020-03-31 13:08:27 585

原创 深入理解Java虚拟机读书笔记

JVM相关知识1.Java虚拟机准确式内存管理​ 一款名为Exact VM的虚拟机,采用准确是内存管理,指虚拟机可以知道内存中某个位置的数据具体是什么类型。​ 如内存中有一个32bit的整数123456,虚拟机有能力分辨出它是指向一个123456的内存地址的引用类型还是一个数值为123456的整数2.Java内存区域与内存溢出异常Java内存区域(运行时数据区域)和内存模型(JMM)...

2020-02-14 16:07:10 1235 1

原创 ElasticSearch 学习(一)——安装配置,基本概念与操作

Elastic Search 学习安装与环境配置安装包下载安装环境为macOS,直接去官网进行下载解压安装,但是下载很慢,是外网。官网下载网址:https://www.elastic.co/cn/downloads/elasticsearch也可以直接使用brew安装,网上都有教程。可视化插件选择直接去chrome商店下载Elastic Search head插件,是一款管理ES的可视化插件。https://chrome.google.com/webstore/detail/elastics

2021-03-03 14:34:25 204 1

原创 DDD学习(二)—— 领域建模重要概念

领域建模重要概念在阅读之前应该理解了DDD的主要思想和 限界上下文,子域核心域等基础概念实体(Entity)重要概念:标识,可能由唯一一条属性,或多种属性组合而成。概念性解释一些对象主要不是由它们的属性定义的。它们实际上表示了一条“标识线”(A Thread of Identity),这条线跨越时间,而且常常经历多种不同的表示。有时,这样的对象必须与另一个具 有不同属性的对象相匹配。而有时一个对象必须与具有相同属性的另一个对象区分开。错误的标识可能会破坏数据。主要由标识定义的对象被称作ENT

2020-11-22 15:38:17 570 1

原创 DDD学习(一)——通用语言

什么是DDDDDD是领域驱动设计(Domain-driven design) 的缩写,我们需要关注的是为什么要用它,谁来用它,后面将要学到什么样的概念和知识来运用它?引言软件是用来解决问题的。支付软件解决支付动作与资金流向问题,电商购物软件解决购物及订单问题,音视频软件解决音视频播放问题。如果软件脱离了它解决问题的领域,就称不上是软件了。那么软件既然是用来解决一些领域当中的问题的,就要关注怎么去用软件技术来更好地解决领域,当然对领域进行必要的了解十分重要(技术方案也很重要)。DDD可以帮助我们对领

2020-11-14 16:32:18 858

原创 Spring Cloud与Docker微服务架构实战(五)—— 使用Feign实现声明式REST调用

介绍Feign是Netflix开发的声明式、模版化的HTTP客户端。Feign使用简单,创建一个接口,并加上一些注解,代码就完成了。Feign支持多种注解,如自带的注解或JAX-RS注解等为服务消费者整合Feign1.复制项目microservice-simple-consumer-movie,将artifactId修改为microservice-simple-consumer-movie-feign2.添加Feign依赖<!-- https://mvnrepository.com/art

2020-10-13 13:26:09 343

原创 Spring Cloud与Docker微服务架构实战(四)—— Ribbon客户端侧负载均衡

五、使用Ribbon实现客户端侧负载均衡简介为Ribbon配置服务提供者地址列表后Ribbon可以基于某种负载均衡算法,自动的帮服务消费者去请求,如轮询、随机等,也可以自定义负载均衡算法。下图是Ribbon与Eureka联用的框架图为服务消费者整合Ribbon为前文编写的电影微服务整合Ribbon1.复制项目microservice-simple-consumer-movie,将ArtifactId修改为microservice-simple-consumer-movie-ribbon2.引

2020-09-29 22:29:18 259

原创 Spring Cloud与Docker微服务架构实战(三)—— 服务注册与发现

四、微服务注册与发现解决硬编码提供服务地址的问题,需要一个强大的服务发现机制。服务发现组件正是微服务架构中十分关键的一个组件。服务提供者、消费者、服务发现组件三者的关系大致如下:各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息。服务消费者可从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口各个微服务与服务发现组件使用一定机制(心跳)通信。服务发现组件如长时间无法与某微服务实例通信,就会注销该实例微服务网络地址发生变更(实例增减或I

2020-09-24 10:09:44 299

原创 Spring Cloud与Docker微服务架构实战(二)——Spring Boot 示例服务及actuator

三、开始使用Spring Cloud开始之前还是选择最新的Spring Boot 2.3.4.RELEASE 版本,采用mysql作为数据库而不是h2。 也用到了一些常用的maven插件1.从例子入手一个电影售票系统,用户向电影微服务发起购票请求,电影微服务要调用用户微服务接口,查询用户余额,场景示例如下先编写一个用户微服务,再编写一个电影微服务2.编写服务提供者需求:通过主键查询用户信息。便于测试,使用Spring Data JPA作为持久层框架,使用H2作为数据库编写项目1.起一个项

2020-09-22 23:51:30 272

原创 Spring Cloud与Docker微服务架构实战(一)——概述与微服务简介

Spring Cloud与Docker微服务架构实战一些概述性介绍和微服务相关概念简单介绍,重点关注代码实现一、概述单体应用存在的一些问题复杂性高技术债务部署频率低可靠性差拓展能力受限阻碍技术创新…微服务定义In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each ru

2020-09-22 23:47:32 254

原创 Spring Cloud 微服务实战(二)—— 服务治理

服务治理 Eureka服务注册每个服务去构建中心中注册自己提供的服务,将主机,端口号、版本号通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。一个例子:服务名位置服务A192.168.0.100:8000 192.168.0.101:8000服务B192.168.0.100:9000 192.168.0.101:9000 192.168.0.102:9000服务中心还要以心跳机制不断检测清单中服务是否可用并剔除不可用服务服务发现服务间调用不

2020-09-21 16:05:49 148

原创 Spring Cloud 微服务实战(一)——微服务构建相关

微服务构建一个微服务构建的示例demo,构建一个Spring Boot的hello world 即可,如何创建一个最基础的Springboot项目此处不再赘述,重点关注该项目的一些其他方面,如测试、监控和一些拓展知识单元测试一个简单的例子import com.lzy.springcloudtest.web.HelloController;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;

2020-09-16 15:56:10 125

原创 109. 有序链表转换二叉搜索树 LeetCode

将有序数组转换为二叉搜索树有序链表转换二叉搜索树题目说明给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5思路先来看.

2020-09-08 10:36:52 73

转载 剑指 Offer 43. 1~n整数中1出现的次数

在LeetCode上看到了这题一个解法,记录一下例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6 限制:1 <= n < 2^31来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof著作权归领扣网络所有。商

2020-08-24 15:59:19 116

原创 负载均衡算法实现(权重随机、平滑轮询、一致性哈希

写在前面通过客户端实现负载均衡算法(包括随机,轮询,一致性哈希),要求在客户端使用参数指定负载均衡策略和调用次数,调用不同的服务端。三台服务器,一台客户端由于只在一台机器上进行实现,三台服务器的不同由端口号来区分客户端,服务端均采用spring-boot暴露Restful接口三种负载均衡策略随机算法随机算法顾名思义,从一些服务器列表中随机挑选出一个服务器来进行负载操作,强调随机性。但只是简单随机会有一些问题,如果我们有3台服务器,运算效率差距很大,第一台运算效率100分,第二台50分,第

2020-08-18 19:42:51 2550

转载 HTTP 如何传输大文件——一种解决思路

最近面试被问到了大文件传输的解决方案,了解不够深入,上网上查了一些解决方案,记录一下:数据压缩浏览器在发送请求时都会带着 Accept-Encoding 头字段,里面是浏览器支持的压缩格式列表,例如 gzip、deflate、br 等,这样服务器就可以从中选择一种压缩算法,放进 Content-Encoding 响应头里,再把原数据压缩后发给浏览器。如果压缩率有 50%,那么 100k 的数据压完之后只剩 50k,相当于在带宽不变的情况下网速快了一倍。这些压缩算法有一个缺点,通常只对文本文件有较好的

2020-08-13 19:35:10 2852 1

原创 分布式锁和分布式事务和分布式Session

分布式锁和分布式事务分布式锁基于MySQL数据库这种方式一般采用数据库乐观锁,不推荐使用基于redis加锁:setnx命令,key是锁的唯一标志,可以为想要加锁的资源设置对应的key,value暂时设置为1,即setnx(lock_ID,1)//setnx返回1,原key不存在,加锁成功;返回0,key存在,加锁失败解锁:释放锁,采用del命令del(lockID)锁超时:得到锁的线程挂掉,来不及释放锁,资源将被永久锁住,别的线程无法进入。setnx的

2020-08-13 15:35:00 467

原创 Go语言常用知识(二)

Go语言常用知识(二)—— GinGinfunc main(){ // 返回json //创建一个默认的路由引擎 r := gin.Default() // 1. 使用map r.GET("/map_json", func(c *gin.Context){ c.JSON(http.StatusOK, gin.H{ "message" : "Hello Golang!", }) }) // 2. 结构体 ty

2020-05-28 14:58:27 157

原创 go语言常用知识(一)

go语言常用知识(一)写在前面Golang 在各平台安装的教程网上都有很多,这里说一下几个环境变量的含义,刚开始往往会只跟着配环境而搞不清楚各个变量的具体意思GOPATH:实际上是GO语言的工作目录,在Linux系统下,需要自己去指定,并创建src(项目源码),pkg(编译后生成文件)和bin(编译后可执行文件)三个目录。使用go get命令可以直接下载第三方的包到自己的项目的src下和相关的执行文件bin目录,和中间文件pkg。这一点很重要,后面使用go.mod的时候,可以直接在mod文件里指定依

2020-05-16 10:54:18 619

转载 centos下的MySQL安装

centos下的MySQL安装一、安装YUM Repo1、由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。下载命令:wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm2、然后进行repo的安装:rpm -ivh mysql57-communi...

2020-05-07 20:38:30 109

原创 Hyperledger学习(二)

Hyperledger学习(二)channel每个channel可以理解成独立的hyperledger fabric实例所以可以创建channel来达到私有转账的目的peer只有加入到channel里后,才有blockchain和hyperledger,有新的peer想加入channel,需要满足一些安全策略一个peer可能加入多个channel,一个channel可能有...

2020-05-07 17:39:26 154

原创 Hyperledger学习(一)相关概念

Hyperledger学习(一)Hyperledger Fabricplug-and-play 即插即用的,任何一个模块可以剔除和添加开发的重点:编写智能合约模块化可扩展超安全解决不信任的个体和组织中引入的信任机制Hyperledger Fabric是基于区块链的企业级分布式账本技术,通过智能合约解决多个组织之间的信任问题重要名词Hyperled...

2020-05-06 20:29:39 333

原创 Java异常机制(基础)

Java异常机制Java中为什么需要异常?程序运行中出现异常就会终止程序。而我们可以通过捕获异常,使异常后面的程序正常运行。Java中经常使用 try...catch来捕获和处理异常Java中的异常采用面向对象的方式处理异常,过程如下抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象交给JRE捕获异常:JRE得到该异常后,...

2020-04-29 16:53:15 181

原创 美团三面和腾讯一面 搜狗一面

美团三面和腾讯一面 搜狗一面搜狗一面(80min)目前为止面过的时间最长的一次。。。询问实习时间?其他offer的意向?介绍项目以及项目问题(10分钟)Java基础部分IO核心数据结构,说一下BufferByte,NIO和IO的区别,NIO处理同一份数据的问题?Java中怎么才能让所有子线程都执行完才执行主线程?多线程控制执行顺序与交互流程?描述一下Java从写完类到运行起来的整个...

2020-03-31 13:07:37 348

原创 Java并发编程(八):线程池与线程调度

线程池与线程调度线程池的好处避免频繁地创建和销毁线程创建了的线程,用完后可以重复利用可以类比数据库连接池理解直接看具体使用代码import java.util.ArrayList;import java.util.List;import java.util.concurrent.*;/** * 一、线程池 :提供了一个线程队列,队列中保存着所有等待状态的线程 * ...

2020-03-29 17:04:40 232

原创 Java并发编程(七):ReadWriteLock读写锁与线程八锁

ReadWriteLock读写锁与线程八锁场景什么情况下采用读写锁?写写操作/读写操作 需要互斥读读操作 不需要互斥如果都用独占锁,有时候很多读操作并发时其实并不需要锁住缺上了锁,导致效率低下,可以采用读写锁来代替:import java.util.Random;import java.util.concurrent.locks.ReadWriteLock;import jav...

2020-03-29 14:45:54 146

原创 Java并发编程(六):Condition控制线程通信

Condition控制线程通信Condition可以用来控制线程间的通信,与wait、notify和notifyAll方法对应的分别是await、signal和sinalAll上篇文章中的生产者消费者采用的是 synchronized和对象的wait和notifyAll方法,可以采用Lock锁结合condition来代替,具体代码如下:依然是修改Clerk类class Clerk{ ...

2020-03-28 15:30:18 190

原创 Java并发编程(五):生产者与消费者之虚假唤醒

生产者与消费者场景生产者不断生成产品,并交给售货员,消费者不断从售货员那里消费产品利用代码实现:public class TestProductorAndConsumer { public static void main(String[] args) { Clerk clerk = new Clerk(); Productor prod...

2020-03-28 14:26:39 231

原创 Java并发编程(四):Callable接口与Lock锁

Callable接口与Lock锁Callable接口和Runnable有什么区别?**方法可以有返回值并且能抛出异常使用时需要FutureTask实现类支持,用于接收运算结果可以通过FutureTask来获得线程执行完的最终结果直接看下面一段代码import java.util.concurrent.*;public class TestCallable { publ...

2020-03-26 20:21:17 497

原创 Java并发编程(三):并发容器类和辅助类

并发容器类和辅助类Java提供了很多支持并发的容器类,例如我们比较熟悉的用来在并发场景下代替HashMap 的ConcurrentHashMap类:JDK1.8之前 采用“锁分段机制”JDK1.8之后 采用 synchronized 锁住Node节点,结合CAS和volatile实现除此之外,还有:ConcurrentSkipListMap通常优于同步的TreeMap在应...

2020-03-26 17:35:21 160

原创 Java并发编程(二):原子变量和CAS算法

原子变量和CAS算法什么是原子性?不可分割的操作,要么全部做了,要么一点也不做i++的原子性问题/** * 实际上i++分为三个步骤 “读-改-写” * int i = 0; * i++; * 实际上的操作: * int tmp = i; * tmp = i+1; * i = tmp; */所以,i++操作并不是原子性的看下面的一段代码:public class M...

2020-03-26 13:42:57 161

原创 Java并发编程(一):volatile关键字与内存可见性

volatile关键字与内存可见性为什么要利用多线程?其实就是为了提高效率,尽可能去利用系统/CPU的资源。但使用不当可能会造成性能更低。因为涉及到 线程调度,上下文切换问题,线程创建销毁等问题,所以在用多线程时有许多注意事项。主要关注 JUC包volatile 关键字来看下面一段代码public class TestVolatile { public static voi...

2020-03-26 13:12:21 177 2

原创 高并发秒杀系统实践

高并发场景最近在慕课网上发现了一个高并发秒杀系统课程,学习了一下,对最后一章节里的场景分析和优化学习过程做了一个记录,分享一下,感觉这个老师讲的挺好的。以一个秒杀场景为例,秒杀功能包括:秒杀接口暴露(不到秒杀时间不允许用户访问)执行秒杀相关查询高并发具体业务(秒杀)场景流程红色部分可能会发生并发操作,绿色部分不会有并发操作下面具体分析并发场景各个节点的优化1.详情页解决方案...

2020-03-25 21:58:51 289

原创 剑指Offer刷题(五)及思路

二叉树的下一个结点题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLink...

2020-03-23 15:53:17 262

转载 Top K问题解决思路(转)

一、Top K问题的概述​ 在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题。例如在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载最高的前10首歌等。针对top K类问题通常比较好的方案是分治+Trie树/hash+小顶堆,即先将数据集按照Hash方法分解成多个小数据集,然后...

2020-03-20 21:47:38 797 1

原创 美团、CVTE、腾讯面试题目总结

美团一面自我介绍项目介绍(10分钟左右)权限管理设计的解决方案,K8S原理,pod是什么?websocket是用tcp还是udp?websocket怎么实现的?Java并发访问HashMap,怎么保证线程安全?HashMap查询最坏情况?怎么保证HashMap整体赋值并发安全?Java运行时数据结构与内存模型?堆和栈保存的内容?栈空间在什么时候进行回收?Java的栈大小是多少?能...

2020-03-20 11:57:04 818

原创 阿里提前批面试查缺补漏

B树B+树的区别?B树的每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null;B+树只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这些叶子节点可以组成顺序结构,方便范围查询之后可以引出与hash索引和有序数组的区别,以及为什么适合做MySQL的索引结构...

2020-03-13 12:01:44 463

原创 从源头解析synchronized与Lock锁(对比和实现细节,锁优化、AQS)

synchronized与Lock锁(对比和实现细节)synchronizedsynchronized关键字在需要原子性、可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是“万能”的。的确,大部分并发控制操作都能使用synchronized来完成。上面这段话出自《深入理解Java虚拟机》,在并发编程中,经常会用到synchronized,下面来看一下synchronized的...

2020-03-10 14:04:49 793

原创 剑指Offer刷题(四)及思路

和为S的连续正数序列小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连...

2020-03-09 17:15:04 1350

原创 Java算法之链表(反转链表、双节点反转链表)

Java算法之链表操作之前做了一些链表的算法题,感觉链表的操作比较抽象,与C++/C不同,Java当中指针的概念不是特别明确,大部分时候我们称它们为引用,可能操作起来有些难以理解,最好画出相应的图来进行说明下面是一道原地反转链表的解法+图解反转链表/*** public class ListNode {* int val;* ListNode nex...

2020-03-06 14:36:44 339

空空如也

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

TA关注的人

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