自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java业务开发常见错误100例-极客时间笔记

2020-05-08 19:58:40 3129

原创 Spring 注解版AOP使用

Spring配置类 /** * AOP:【动态代理】 * 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程模式 * 1、导入aop模块 * 2、定义一个业务逻辑类(MathCalculator),在业务逻辑运行的时候将日志进行打印(方法之前,方法运行结 束,方法出现异常等) * 3、定义一个日志切面类(LogAspect),切面类里面的方法需要动...

2020-03-16 21:44:11 154

原创 Spring注解版之自动装配

自动装配:Spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值 1、@AutoWired:自动注入【Spring定义的】 1、 默认按照类型去容器中找对应的组件 applicationContext.getBean(BookService.class),找到就赋值 2、如果找到相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext....

2020-03-16 21:29:51 174

原创 Spring注解版之生命周期

1通过@Bean注解指定初始化和销毁时机 bean的生命周期 bean创建–初始化–销毁的过程 可以自定义初始化和销毁方法,容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法 指定初始化和销毁方法 在@Bean注解里指定init方法和destroy方法 构造(对象创建) 单实例:在容器启动时创建 多实例:每次获取时创建 初始化:对象创建时 销毁: 单实例:关闭容器时 多实例:...

2020-03-14 00:16:11 244

原创 周日看房

小关北里 https://bj.5i5j.com/zufang/90159249.html https://bj.5i5j.com/zufang/90219798.html 次卧面积10平米左右 惠新东街14号院 惠新里 2. 惠新里217带电梯双南向两居室 7500 出门300米就是惠新西街南口地铁站 樱花园 https://bj.5i5j.com/zufang/90151270...

2020-03-13 22:20:46 140

原创 Spring注解版之组件注册

1 通过@Configuration和@Bean为容器添加Bean Spring使用@configuration注解标识配置类 @Bean注解 向容器中注册Bean,id为方法名,同时也可以使用@Bean(“person”)的方式配置方法名 使用AnnotationConfigApplicationContext可以获取容器,容器中注册的bean通过注解方式配置进去,AnnotationConfi...

2020-03-12 22:15:24 89

原创 换乘方案

齐齐哈尔换乘方案 北京-----齐齐哈尔 1月22日 1月23日 哈尔滨换乘方案 北京-----哈尔滨 1月22日 1月23日 沈阳换乘方案 北京到沈阳还没开始卖

2019-12-25 12:08:17 210

原创 乐乐和猪猪的天津旅游计划

第一天 T57 北京西----天津 11:18:12:58 先去取户口 取完户口大约亮点 古文化街 意大利风情街 海河 谦祥益文苑 7:30场听相声 预计10:00 结束 睡觉 第二天 五大道——滨江道步行街——西开教堂(南京路对面)——瓷房子(赤峰道72号) 吃点啥: 老永胜包子铺 天津大麻花 煎饼果子 耳朵眼炸糕 大饼夹一切 面茶 混沌 羊杂汤 几个大的夜市: 1)河北区:中山北路,十月食...

2019-09-19 12:21:21 104

原创 并发设计模式

Immutability模式:利用不变性解决并发问题 我们可以通过不变性模式解决可见性问题,对象一旦被创建之后,状态就不再发生变化。 将一个类所有的属性都设置成final的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。对于类修改的功能,就直接创建一个新的不可变对象。 对于所有修改都创建一个新的不可变对象可能会比较浪费内存,这时就可以通过享元模式闭目安创建重复对象。 Java语言中Lo...

2019-08-02 20:58:57 140

原创 Tomcat性能调优

JVM GC原理及调优的基本思路 调优原则 CMS合理地设置年轻代和老年代的大小,年轻代太小的话会导致频繁的Minor GC,年轻代太大的话会导致复制开销过大,增加YGC每次的停留时间,而年老代太小的话,会频繁地出发full GC,老年代太大的话,会降低Full GC的频率,但是单次Full GC的时间会变长。 G1收集器关心Java堆的总大小,以及请求处理响应时间 如何监控Tomcat的性能 ...

2019-08-02 16:58:12 105

原创 SpringBoot 使用内嵌Tomcat 以及 Tomcat管理机制

Spring Boot 如何使用内嵌式的Tomcat和Jetty Spring的核心是一个ApplicationContext,它的抽象实现类AbstrtactApplicationContext实现了refresh方法,内部调用了onRefresh方法,我们可以通过重写onRefresh方法,来实现特定的Context的刷新逻辑,创建内嵌式的Web容器。并在方法内部通过getWebServer创...

2019-07-31 12:11:00 2142

原创 分布式之分布式算法

2PC 1.1 准备阶段 协调者询问参与者事务是否执行成功,参与者发回事务执行结果。 1.2 提交阶段 如果事务在每个参与者上都执行成功,事务协调者发送通知让参与者提交事务;否则,协调者发送通知让参与者回滚事务。 需要注意的是,在准备阶段,参与者执行了事务,但是还未提交。只有在提交阶段接收到协调者发来的通知后,才进行提交或者回滚。 存在的问题:1同步阻塞 2单点问题 3数据不一致 4太过保守 本地...

2019-07-31 10:10:47 273

原创 面经总结

看到网上特别多的面经,里边很多问题都不会,有必要总结一下,希望自己能坚持下去,猪猪加油 反射 什么是反射?反射有什么好处 反射的原理? Java语言在编译之后会生成一个class文件,反射就是通过字节码文件找到其类中的方法和属性等; 反射能否调用类的私有属性和方法 可以通过反射调用类的私有属性和方法,Java的private修饰符不是为了绝对安全设计的,而是对用户常规使用Java的一种约束。就好比...

2019-07-26 17:52:25 99

原创 狂砍Kafka

kafka的基本组件 为什么 Kafka 不像 MySQL 那样允许追随者副本对外提供读服务? 答:因为mysql一般部署在不同的机器上一台机器读写会遇到瓶颈,Kafka中的领导者副本一般均匀分布在不同的broker中,已经起到了负载的作用。即:同一个topic的已经通过分区的形式负载到不同的broker上了,读写的时候针对的领导者副本,但是量相比mysql一个还实例少太多。 Kafka的线...

2019-07-26 16:20:01 136

原创 进击的Tomcat之线程池

线程池的关键: 是否限制线程个数 是否限制队列长度 Tomcat对上述两个参数都做出了限制 Java线程池的执行策略 Tomcat线程池的执行策略 Tomcat的TaskQueue重写了LinkedBlockingQueue的offer方法,在offer方法中,如果线程数量大于最大线程数,则将任务添加到任务队列中;如果当前线程数大于核心线程数;此时如果已提交线程数小于当前线程数则无需创建线程,...

2019-07-21 22:49:38 107

原创 进击的Tomcat之整体架构篇

Tomcat整体架构示意 Tomcat连接器 tomcat的连接器主要完成3个功能,分别是网络通信,应用程协议解析,Tomcat request/response和Servlet request/response的转化 对此Tomcat设计了三个模块来完成上述功能,分别是EndPoint,Processor,Adapter EndPoint Acceptor: 监听socket连接请求 Soc...

2019-07-21 22:30:14 75

原创 进击的Tomcat

Tomcat的类加载机制 Java的双亲委派机制 (启动)BootstrapClassLoader 加载JVM启动时所需要的核心类 (扩展)ExtClassLoader 加载ext目录下的jar包 (系统)AppClassLoader 加载classpath下的类 (自定义)自定义类加载器 加载自定义路径下的类 先委托给父加载器去加载,父加载器加载不到以后再给子加载器去加载 为什么需要双亲委派模型...

2019-07-21 22:04:03 61

原创 拿下SpringCloud之Eureka注册中心Ribbon负载均衡

服务发现的需求和模式 传统集中式代理 问题:语言无关 配置比较麻烦,单点问题,多一条有性能开销 服务注册中心+客户端嵌入式代理 问题:客户端复杂,无法做集中式治理 主机独立进程代理 问题:运营部署复杂 Euraka和Ribbon架构部署方案 Eureka内存概念模型 Ribbon 客户端负载均衡工具 Rule 负载均衡策略 Ping 心跳检测 ServiceList Update 服务列表更新...

2019-07-20 23:11:11 160

原创 拿下SpringCloud之Hystrix容错限流

为什么需要容错限流 服务依赖 :服务扇出 单个服务延迟:所有请求都阻塞在某个服务上 容错限流的原理 超时:主动超时 限流:限制最大流量 熔断:当错误达到阀值时类似于保险丝的熔断 隔离:隔离不同的依赖调用 服务降级 断路器模式 舱壁隔离模式 1 凡是依赖都有可能失败 2 凡是资源都有限制 3 网络并不可靠 4 延迟是应用稳定性的杀手,延迟会占用大量的资源,比如内存等 Hystrix原理 Hystr...

2019-07-19 21:01:48 169

原创 拿下SpringCloud之Zuul网关

Zuul网关的基本应用场景 单点入口:对外只暴露出一个接口 路由转发:将请求转发到对应的微服务(无线,H5,第三方平台) 限流熔断: 日志监控:对所有请求进行日志监控 安全认证 Zuul网关的高级应用场景 蓝绿部署 开发者测试分支 埋点测试 压力测试 镜像复制到生产服务器上 调试路由 将请求转发到调试的服务器上 金丝雀测试 发版后逐渐将流量转发到更新后的服务器上 粘性测试 记住请求,下次把它转发到...

2019-07-19 17:43:16 107

原创 杀死Dubbo

什么是Dubbo? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。 为什么要用Dubbo? 使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。 Dubbo 和 Spring Cloud 有什么区别? 通信方式不同 Dubbo 使用...

2019-07-19 12:35:29 260

原创 Java Web疑难知识点

session,cookie和token cookie session cookie只是实现session的其中一种方案。虽然是最常用的,但并不是唯一的方法。禁用cookie后还有其他方法存储,比如放在url中 现在大多都是Session + Cookie,但是只用session不用cookie,或是只用cookie,不用session在理论上都可以保持会话状态。可是实际中因为多种原因,一般不会单...

2019-07-18 15:47:29 105

原创 分布式之分布式锁及一致性哈希算法

1.1 数据库实现分布式锁 利用主键唯一规则,在争抢锁的时候向DB中写一条记录,这条记录主要包含锁的id、当前占用锁的线程名、重入的次数和创建时间等,如果插入成功表示当前线程获取到了锁,如果插入失败那么证明锁被其他人占用,等待一会儿继续争抢,直到争抢到或者超时为止。 优点:实现简单 缺点:没有超时保护机制,mysql存在单点,并发量大的时候请求量太大、没有线程唤醒机制 对于超时保护:如果可能,可以...

2019-07-18 00:08:03 351

原创 攻克Redis

**为什么要用 redis/为什么要用缓存? ** 高性能 高并发 为什么要用 redis 而不用 map/guava 做缓存? redis支持更丰富的数据类型 Redis支持数据的持久化 Redis支持集群模式 Redis使用单线程的多路 IO 复用模型 redis 常见数据结构 1.String value其实不仅可以是String,也可以是数字。 2.Hash hash特别适合用于存储对象,...

2019-07-17 21:02:04 79

原创 干掉zookeeper

zookeeper是什么 zookeeper是一个基于观察者模式的分布式微服务管理框架。 zookeeper的特点 一个领导者 多个跟随者 集群中只要有半数以上的节点存活,就能够正常工作 全局数据一致,每个server保存一份相同的副本 更新请求顺序执行 更新顺序原子性 zookeeper的数据结构 zookeeper的数据结构和linux文件系统很类似,整体上是一棵树,每个节点是一个ZNode,...

2019-07-12 01:38:11 552

原创 Java基础总结提纲(根据群里发的找出自己之前不会的知识点)

Arrays.asList( )使用的注意要点 传递的数组必须是对象数组,而不是基本类型。 使用集合的修改方法:add()、remove()、clear()会抛出异常。 如何正确的将数组转换为ArrayList? List list = new ArrayList<>(Arrays.asList(“a”, “b”, “c”)) 使用 Java8 的Stream( ...

2019-07-11 20:59:09 93

原创 Spring面试知识点

代理 静态代理 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。代理对象和实际对象都继承了同一个接口,在代理对象中指向的是实际对象的实例,这样对外暴露的是代理对象而真正调用的是 Real Object 静态代理的问题: 1、 当需要代理多个类的时候,由于代理对象要实现与目标对象一致的接口,有两种方式: 只维护一个代理类,由这个代理类实现多个接口,...

2019-07-11 19:02:25 133

原创 JDK并发工具类以及AQS组件

AQS介绍 AbstractQueuedSynchronizer,AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器。 AQS 原理 AQS维护一个共享资源state,通过内置的FIFO来完成获取资源线程的排队工作。(这个内置的同步队列称为"CLH"队列)。该队列由一个一个的Node结点组成,每个Node结点维护一个prev引用和next引用,分别指向自己的...

2019-07-10 21:20:11 198

原创 JUC常见的并发工具类

ConcurrentHashMap CopyOnWriteArrayList CopyOnWriteArrayList 读取是完全不用加锁的,并且更厉害的是:写入也不会阻塞读取操作。只有写入和写入之间需要进行同步等待。 CopyOnWriteArrayList 类的所有可变操作(add,set等等)都是通过创建底层数组的新副本来实现的。当 List 需要被修改的时候,我并不修改原有内容,而是对原有...

2019-07-10 21:08:53 189

原创 Java并发之原子类提纲

无锁方案的实现原理 Java是如何实现原子化操作的 AtomicLong getAndIncrement() unsafe.getAndAddLong() 该方法首先会在内存中读取共享变量的值,之后循环调用 compareAndSwapLong() 方法来尝试设置共享变量的值,直到成功为止。(经典do while实现) compareAndSwapLong() 是一个 native 方法,只有当内...

2019-07-10 17:14:36 61

原创 Leetcode 103 二叉树的锯齿形层次遍历

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 详解:这道题的关键在于通过两个栈配合来完成对二叉树的锯齿形层次遍历,当栈1不为空而栈2为空时,顺序遍历这一层;当栈1为空,栈2不为空时逆序遍历这一层。 class Solution { public List<List<Integer>> zig...

2019-07-06 11:27:29 80

原创 Leetcode 234 回文链表

请判断一个链表是否为回文链表。 详解:我们首先可以找到链表中间的节点,然后以中间的节点为头节点,翻转后边的所有元素,这里需要通过preSlow断开整个链表,让链表分成前后两个部分,随后对这两个链表从前向后依次比较。 class Solution { public boolean isPalindrome(ListNode head) { if(head==null) ret...

2019-07-06 11:17:46 65

原创 Leetcode 102 二叉树的层次遍历

Leetcode 102 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 详解:这道题没什么好说的,层次遍历是二叉树一种非常基础的遍历方式, class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List&lt...

2019-07-06 11:02:13 73

原创 Leetcode 101 对称二叉树

Leetcode 101 对称二叉树 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 详解:我们可以使用递归来解决此类问题,如果两个节点对称,则左边节点的右子树和右边节点的左子树相同,递归时左右节点都从根节点开始计算。 class Solution { public boolean isSymmetric(TreeNode root) {...

2019-07-06 10:52:17 74

原创 Leetcode 237 删除链表中的节点

Leetcode 237 删除链表中的节点 示例 1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 详解:我们可以使用直接赋值的方式来删除节点,因为题目中隐含了条件,这个节点不会是链表的最后一个节点。 class Solution { ...

2019-07-06 02:03:22 79

原创 Leetcode 238 除自身以外数组的乘积

Leetcode 238 除自身以外数组的乘积 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。 详解:这道题可以使用动态规划来解决,le...

2019-07-06 01:57:17 87

原创 Leetcode 239 滑动窗口最大值

Leetcode 239 滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。 返回滑动窗口最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大...

2019-07-06 01:48:08 90

原创 Leetcode 240 搜索二维矩阵 II

Leetcode 240 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10,...

2019-07-06 01:13:28 87

原创 Leetcode 241 为运算表达式设计优先级

Leetcode 241 为运算表达式设计优先级 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。 示例 1: 输入: “2-1-1” 输出: [0, 2] 解释: ((2-1)-1) = 0 (2-(1-1)) = 2 示例 2: 输入: “23-45” 输出: [-34, -14, ...

2019-07-06 01:05:54 261

原创 Spring Bean的生命周期

1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。 对于ApplicationContext容器,当容器启动结束后,便实例化所有的bean。 容器通过获取BeanDefinition对象中的信息进行实例化。并且这一步仅仅是简单的实例化,并未进行依赖注入...

2019-07-04 21:41:26 105

空空如也

空空如也

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

TA关注的人

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