自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

栋先生

java程序员

  • 博客(80)
  • 资源 (5)
  • 收藏
  • 关注

原创 JVM概述

Java 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实现了Java语言最重要的特征:即平台无关性,同时学习JVM也是一个java程序员在成长过程中的必经之路。本系列博客总结了LZ在学习JVM时的一些经验和面试要点,希望可以帮助到大家。

2017-04-17 21:54:24 1206

原创 LeetCode-二分查找经典题

一、排序数组的二分查找最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。二分查找的难点在于需要动态的设置查找范围的start和end。14. 最长公共前缀:寻找右侧边界34. 在排序数组中查找元素的第一个和最后一个位置:寻找左侧边界、寻找右侧边界(核心在于怎么确定左右边界)704. 二分查找:寻找一个数(核心在于左边界和右边界的动态变化)287. 寻找重复数:一个无序数组有n...

2020-03-05 21:52:16 1109

原创 服务超时、重试次数、熔断如何设置

超时时间为什么要设置超时时间?针对服务调用都要设置一个超时时间,以避免依赖的服务迟迟没有返回调用结果,把服务消费者拖死。超时时间怎么设置?方案一:按照服务提供者线上真实的服务水平,取 P999 或者 P9999 的值,也就是以 99.9% 或者 99.99% 的调用都在多少毫秒内返回为准。方案二:按照接口重要性来进行设置,并发低的接口设置的超时时间可以多点,比如2s,并发高的接口设置的...

2019-12-27 18:39:03 3199

原创 面试常问之数据库

文章目录一、mysql二、redisredis基础问题redis疑难问题一、mysql索引原理为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?事务的隔离级别以及每种隔离级别解决的问题mysql中每种隔离级别的实现原理(MVCC+锁)mysql锁分类以及常见增删改查语句的加锁分析一条sql语句在mysql中的执行过程mysql查询优化器对sql的优化过程(基于规则的优...

2019-12-27 18:31:16 420

原创 重排链表

解题思路给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.通过观察,可以将重排链表分解为以下三个步骤:首先重新排列后,链表的中心节点会变为最后一个节点。所以需要先找到链表的中心节点:876. 链表的中间结点可以按照中心节点将原始链表划分为左右两个链表。2.1. 按照中心节点将原始链表划分为左右两个链表,左链...

2019-12-08 20:39:07 1644

原创 反转链表

反转一个单链表,此题为面试高频题。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解法一:递归假设列表的其余部分已经被反转,现在我该如何反转它前面的部分? public ListNode reverseList(ListNode head) { //终止...

2019-12-08 20:36:33 206

原创 十二、内存分配与回收策略

https://my.oschina.net/cimu/blog/1546528对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾收集行为时打印内存回收日志,并且在进程退出的时候输出当前的内存各区域分配情况。在实际应用...

2019-11-29 21:43:29 282

原创 Big O notation 算法复杂度计算方法

文章目录常见的算法复杂度O(1)O(N)O(N^2)O(logN)O(2^n)O(n!)时间复杂度对比Big O notation大零符号一般用于描述算法的复杂程度,比如执行的时间或占用内存(磁盘)的空间等,特指最坏时的情形。常见的算法复杂度O(1):Constant Complexity 常数复杂度O(N):线性时间复杂度O(N^2):N square Complexity 平方O(...

2019-06-30 18:34:03 8571

原创 团队沟通之一个简单的需求是如何搞复杂的

一、背景事情的背景是这样的,产品提出了一个 票圈关联演出-演出露出模块规范化 的需求。简单来说呢,就是把下图黑框中的演出的展示信息统一成 海报+名称+场馆名+价格。如果是已售空,则不展示价格信息,显示为 已售空 三个字。上图展示的只是需要修改的一个页面,这个演出的露出模块设计到多个页面。产品在安排这个需求时,以为只需要前端改下就行,并没有给后端估计时间。但前端在做的过程中,发现有些接口中...

2019-04-25 23:57:00 422

原创 使用并行流还是CompletableFuture(四)

并行流和CompletableFuture使用定制的执行器结论我们知道,对集合进行计算,可以使用并行和异步的CompletableFuture操作,都可以加快其处理,那么到底该使用并行还是异步呢?并行流和CompletableFuture如上篇博客中所讲到的getPrice()方法,使用并行方式处理,代码如下: public List<Str...

2018-08-19 21:52:43 1820

原创 工厂方法创建CompletableFuture(三)

CompletableFuture类自 身提供了大量精巧的工厂方法,使用这些方法能更容易地完成整个流程,还不用担心实现的细节。 public Future<Double> getPriceAsync(String product) { //创建CompletableFuture 对象,它会包含计算的结果 CompletableFuture&...

2018-08-19 21:51:18 683

原创 使用CompletableFuture构建异步应用(二)

获取商品价格的同步方法将同步方法转换为异步方法错误处理本文主要介绍Java 8 中的异步处理的方式,主要是 CompletableFuture类的一些特性。 为了展示CompletableFuture的强大特性,我们会创建一个名为“最佳价格查询器” (best-price-finder)的应用,它会查询多个在线商店,依据给定的产品或服务找出最低的价格。这个过程中,你会学到...

2018-08-19 21:47:20 1159 1

原创 java中的异步处理和Feature接口(一)

背景介绍Feature接口Feature接口和Tread的区别Feature接口示例Feature接口的局限性背景介绍想象这样一个场景:你可能希望为你的法国客户提供指定主题的热点报道。为实现这一功能,你需要向 谷歌或者Twitter的API请求所有语言中针对该主题最热门的评论,可能还需要依据你的内部算法 对它们的相关性进行排序。之后,你可能还需要使用谷歌的翻译...

2018-08-19 13:38:29 22452 2

原创 枚举enum基本特性

基本特性将静态导入用于enum向enum中添加新方法覆盖enum的方法switch语句中的enumenum(枚举)是Java se5中添加的一个新特性,是指一个经过排序的、被打包成一个单一实体的项列表。一个枚举的实例可以使用枚举项列表中任意单一项的值。枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确...

2018-07-29 23:57:21 2494

原创 函数重构之道

短小只做一件事每个函数一个抽象层级switch语句函数参数无副作用输出参数分隔指令与询问使用异常替代错误码抽离try/catch代码块如何写出简洁函数我们先来介绍写的比较长的函数。以下代码做了好几件事情。它创建缓冲区、获取页面、搜索继承下来的页面、渲染路径、添加神秘的字符串、生产HTML等等。 // Listing 3-1 ...

2018-07-29 12:26:52 1463

原创 Java中的时间和日期处理

日期处理旧版本DateCalendarJava 8日期和时间:LocalDate和LocalTime创建LocalDate和LocalTime的两种方式读取LocalDate和LocalTime常用值的两种方式合并日期与时间LocalDateTime机器时间处理旧版本:TimestampJava 8:Instant时间区间:Duration和Per...

2018-07-22 22:06:11 11561 2

原创 《重构》读书笔记

本文是重构的思维导图

2018-07-15 23:57:41 427

原创 程序员们,转变你的思维方式吧!

笔者已经工作两年多了,在这里我想谈下关于程序员关于职业的思维方式。对于职业的思维方式,决定了一个人的选择和成就。建立一个正确的思维方式,有利于我们主动管理自己的职业生涯,从而达到自己追寻的结果。转变自己的思维方式我在工作当中发现,有许多开发人员在面对工作时的思维方式就是完全错误的。为什么这么说呢,因为大多数人都认为自己是在为公司工作,觉得自己只是一个打工的,做好领导布置的任务就可以了。...

2018-07-15 16:52:00 1208

原创 线程安全

一、什么是线程安全?二、java语言中的线程安全三、线程安全的实现方法1. 互斥同步Java中实现互斥同步的两种方法缺点2. 非阻塞同步缺点3. 无同步方案四、锁优化1. 自旋锁与自适应自旋2. 锁消除3. 锁粗化4. 轻量级锁加锁过程解锁过程注意事项5. 偏向锁加锁过程偏向锁的撤销注意事项轻量级锁、偏向锁的状态转化...

2018-07-08 16:22:33 734

原创 Java线程调度与线程优先级

一、线程调度1.1 协同式线程调度1.2 抢占式线程调度二、线程优先级三、线程中的状态转换一、线程调度线程调度是指系统为线程分配处理器使用权的过程,主要调度方式有两种,分别是协同式线程调度和抢占式线程调度。1.1 协同式线程调度协同式线程调度,线程的执行时间由线程本身控制。协同式线程调度,线程执行时间由线程本身来控制,线程把自己的工作执行完之后,...

2018-07-08 16:19:17 3318

原创 线程的实现方式

一、线程的三种实现方式1. 使用内核线程实现优点缺点2. 使用用户线程实现优点缺点3. 使用用户线程加轻量级进程混合实现优点:二、Java线程的实现本文主要介绍线程的3种实现方式和java线程的实现方式。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配 和执行调度分开,各个进程既可以共享进程资源(内存地址、文件I/O等)...

2018-07-08 16:16:54 3156

原创 先行发生原则(happens-before)介绍

一、什么是先行发生原则二、Java内存模型中的先行发生关系三、如何应用先行发生规则如果Java内存模型中所有的有序性都仅仅靠volatile和synchronized来完成,那么有一些操作将会变得很烦琐,但是我们在编写Java并发代码的时候并没有感觉到这一点,这是因为Java语言中有一个“先行发生”(happens-before)的原则。 这个原则非常重要,它是判断数据是...

2018-07-08 16:15:25 2958 2

原创 volatile变量详解

一、可见性二、禁止重排序三、java内存模型对volatile的特殊规则关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、 完整地理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用synchronized来进行同步。 当一个变量定义为volatile之后,它将具备两种特性:一是可见性,二是会禁...

2018-07-08 16:14:17 4299 2

原创 Java内存模型

一、硬件的内存模型和指令重排序二、Java内存模型2.1 主内存与工作内存2.2 内存间交互操作2.3 对于long和double型变量的特殊规则2.3 Java内存模型的三大特征原子性可见性有序性多任务处理在现代计算机操作系统中几乎已经是一项必备的功能了。计算机cpu的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信...

2018-07-08 16:09:56 305

原创 分布式系统入门

一、什么是分布式系统?分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅是通过消息传递进行通信和协调的系统。 首先分布式系统一定是由多个节点组成的系统,一般来说一个节点就是我们的一台计算机;然后这些节点不是孤立的,而是相互连通的;最后,这些连通的节点上部署了我们的组件,并且互相之间的操作会有协同。二、为什么需要分布式系统?升级单机处理能力的性价比越来越低。...

2018-06-16 18:38:42 3205

原创 google Guava之EventBus

EventBus基本用法1. 创建Listener2. 创建EventBus并发送消息Listener之间的继承关系Subscriber不同类型参数的Subscribeevent继承关系的eventDeadEventEventBus之异常处理EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现,在应...

2018-06-03 22:35:52 11684 1

原创 Solr理论基础

一、Solr与传统数据库技术的区别什么是传统型数据库什么是搜索引擎?Solr简介二、Slor倒排索引的基本机构三、Solr之复杂查询布尔查询短语查询与术语位置模糊匹配通配符搜索区间搜索模糊/编辑距离搜索邻近搜索四、Solr相关度计算方法默认相似度词项频次反向文档频次词项权重规范化因子字段规范查询规范协调因子查准率与查全率查...

2018-05-30 13:06:00 2161

原创 Solr查询处理简介

一、Solr的查询表单详解二、Solr的搜索返回机制三、排名检索四、分页和排序分页排序五、拓展的搜索功能一、Solr的查询表单详解 Solr管理控制台的查询表单所有与solr核心服务有关的交互,如查询处理,都是通过HTTP请求执行的。填写查询表单之后,创建一个HTTP Get请求并发送给Solr。 Solr查询表单的所有参数...

2018-05-30 13:05:19 1025

原创 Solr入门

一、solr安装验证jdk环境下载solr二进制分发包二、启动solr三、了解Solr主目录四、对示例文档进行索引本文主要介绍solr的基本用法。首先,我们从Apache官网下载solr的二进制分发包,然后解压缩文件。安装完成后,我们将启动solr服务器,并通过浏览器访问solr的管理控制台来确认solr运行起来了。最后通过solr的管理控制台来进行一些基础的操...

2018-05-28 21:59:10 573

原创 mo9 2年java面试总结

mo9是一家做数字货币交易所的公司,在4月份的时候自己去mo9参加了java开发的面试。mo9的面试更加注重基础,问了很多java基础方面的知识。下面将面试的一些问题做个记录,以供大家参考。在面试的过程中,面试官会根据你的回答来不断的深入问你,来考察你对知识理解的深度。java基础相关问题String s1= ‘abc’ 和 String s2 = new String(‘abc...

2018-05-01 19:31:05 609

原创 单例模式

单例模式是常见的一种设计模式,本文就来总结一下单例模式的几种写法。一、饿汉式所谓饿汉式单例设计模式,就是将类的静态实例作为该类的一个成员变量,也就是说在JVM 加载它的时候就已经创建了该类的实例,因此它不会存在多线程的安全问题。/** * 饿汉式版单例模式的实现 */public class Singleton { public static final Sing...

2018-03-12 22:32:17 272

原创 使用spring session解决session共享问题

一、导入Maven依赖二、 添加Spring配置文件三、在web.xml中添加相应的filter过滤器在Web项目中配置Spring Session分为四步:搭建用于Spring Session的数据存储将Spring Session的jar文件添加到web应用中将Spring Session filter添加到web应用的配置中配置Spring Session...

2018-03-12 22:26:17 1615 3

原创 解决session共享问题方式调研

为了提高服务器性能,最近公司项目采用了分布式服务集群的部署方式。所谓集群,就是让一组计算机服务器协同工作,解决大并发,大数据量瓶颈问题。项目使用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,此时就涉及到一个session共享的问题。因为session是在服务器端保存的,如果用户跳转到其他服务器的话,session就会丢失,一般情况下,session不可跨服务器而存在。...

2018-03-12 22:13:16 867

原创 深入理解final关键字

一final数据final变量空白finalfianl参数二final方法final和private关键字三final类Java中的final关键字通常代表“这是无法改变的”。不能改变通常可能出于以下两种理由:设计或效率。下面详细介绍了可能用到final的三种情况:数据、方法和类。一、final数据final数据总共分为以下三种:final变量、空白f

2018-01-30 00:05:07 343

原创 MySql绿色版安装与配置

假设我们想配置一个端口为3381的 MySql,同理也可以依照该方法配置多个MySql:解压MySql.7z文件,重新复制一份3380文件,将其重命名为3381。进入mysql\3381\data\目录下面,打开my.ini文件,将所有的3380替换为3381。将以下的3个路径配置成自己MySql所在的路径: datadir=C:/software/development/mysql/

2018-01-20 15:04:45 565

原创 Spring MVC快速体验

Spring MVC 快速体验的五个步骤: 1. 配置web.xml 2. 创建Spring配置文件applicationContext.xml 3. 创建model 4. 创建controller 5. 创建视图文件userlist.jsp 6. 创建Servlet配置文件Spring-servlet.xml

2017-10-07 19:39:48 489

原创 Spring MVC入门

Spring的Web框架就是为解决在web开发中遇到如一系列问题而设计的。 SpringMVC基于模型-视图-控制器( Model-View-Controller, MVC) 模式实现, 它能够帮你构建像Spring框架那样灵活和松耦合的Web应用程序。每当用户在Web浏览器中点击链接或提交表单的时候, 请求就开始工作了。 对请求的工作描述就像是快递投送员。

2017-10-07 19:39:00 535

原创 Spring源码解析-环境搭建

注意:必须使用jdk1.8。克隆Spring项目到本地 git clone https://github.com/spring-projects/spring-framework.git查看Spring项目的分支 git branch -a master remotes/origin/3.0.x remotes/origin/3.1.x remotes/origin/3

2017-08-13 09:57:27 442

原创 Quartz之CronTrigger

上篇博文简单的介绍了Quartz的基本使用,现在介绍一下最常用的触发器:CronTrigger。

2017-07-16 22:17:37 1003

原创 Quartz入门指南

什么是Quartz?Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。 作为一个优秀的开源调度框架,Quartz 具有以下特点:强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式;

2017-07-16 21:36:15 673

看透spring mvc源代码分析与实践扫描版带目录+源码

看透spring mvc源代码分析与实践扫描版带目录+源码,内容清晰。

2018-04-15

mysql5.6绿色版

mysql5.6绿色版,可以配置成多实例的mysql,可以参考我的博客文章进行具体操作。

2018-01-18

Java编程思想(第4版)_扫描版带目录+习题答案+源代码TIJ4-code

Java编程思想(第4版)_扫描版带目录+Java编程思想(第4版·习题答案)+源代码TIJ4-code

2017-11-09

Maven实战_扫描版不带目录

Maven实战_扫描版不带目录

2017-05-14

选择排序法和插入整数

选择排序法和插入整数

2013-11-16

空空如也

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

TA关注的人

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