java
weixin_43770982
这个作者很懒,什么都没留下…
展开
-
java
这篇博客主要讲解的是如何使用单链表实现一个简单版的队列。单向链表队列是属于非循环队列,同时队列的长度是不受限制的,也就是说添加数据的速度比拉取数据的速度快时,队列的长度是无限增长的。单链队列其本质就是一个链表,只不过是在获取或添加数据的时候跟普通的链表有所区别,队列在获取数据的同时也将该节点删除,并且每次获取数据都是从表头获取,普通链表可以获取任意节点的数据;队列在增加数据时总是添加到链表的尾部,...原创 2018-11-22 17:10:12 · 102 阅读 · 0 评论 -
你真的适合学习JAVA开发吗?
JAVA为什么有前途?过去的十多年,JAVA基本每年都是全世界使用人数第一的语言。全世界数百万的IT企业构建了庞大的JAVA生态圈,大量的软件基于JAVA开发。JAVA也被誉为“计算机界的英语”。JAVA的应用范围涉及所有行业、绝大多数IT企业,形成了庞大的生态圈。如下是智联招聘在一个月内、北京地区的JAVA人才需求量:当月需求量25121个职位,我们以一个职位招聘...原创 2019-03-19 17:38:14 · 263 阅读 · 1 评论 -
少走弯路,给Java 1~5 年程序员的建议
今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。在大家看之前,LZ要先声明两点。1、由于LZ本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可,切勿照搬。2、下...原创 2019-03-15 17:37:58 · 93 阅读 · 0 评论 -
java三大特性:封装、继承、多态
至今记得若干年前,去面试排了半天的队,到我的时候,面试官问我的第一个问题,java三大特性是什么~我支支吾吾的没有答全~0.0什么是封装?举个例子:有一个房子,房子里面有厨房,卫生间,卧室,客厅等房间,每一个房间都有各自的用途,而客人要来我家吃饭也好,闲聊也好,那么他只能从我家的门(对外暴露的接口)进来,那这个房子就代表一个“封装”。封装(Encapsulation)是面向对象方法的重...原创 2019-03-12 11:38:12 · 77 阅读 · 0 评论 -
常见的高可用MySQL解决方案
MySQL数据库作为最基础的数据存储服务之一,在整个系统中有着非常重要的地位,因此要求其具备高可用性是无可厚非的。有很多解决方案能实现不同的SLA(服务水平协定),这些方案可以保证数据库服务器在硬件或软件出现故障时服务继续可用。高性能性需要解决的主要有两个问题,即如何实现数据共享或同步数据,另一个是如何处理failover,数据共享一般的解决方案是通过SAN(Storage Area N...原创 2019-03-20 17:58:19 · 134 阅读 · 0 评论 -
Java工程师成神之路
一、基础篇JVMJVM内存结构堆、栈、方法区、直接内存、堆和栈区别Java内存模型内存可见性、重排序、顺序一致性、volatile、锁、final垃圾回收内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定JVM参数及调优Java对象模型oop-klass、对象头HotSpot即时编译器、编译优化类加载机制classLoad...原创 2019-03-17 15:05:12 · 90 阅读 · 0 评论 -
在Java中使用redisTemplate操作缓存
背景在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条。但同时对查询速度的要求也比较高。这个数据库之前在没有使用Presto的情况下,使用的是Hive,使用Hive进行一个简单的查询,速度可能在几分钟。当然几分钟也并不完全是跑SQL的时间,这里面包含发请求,查询数据并且返回数据的时间的总和。但是即使这样,这样的速度明显不能满足交互式的查询需求。我们的下一个解决方案就...原创 2019-03-21 15:13:35 · 414 阅读 · 0 评论 -
为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
Spring 历史说起 Spring Boot 我们不得不先了解一下 Spring 这个企业,不仅因为 Spring Boot 来源于 Spirng 大家族,而且 Spring Boot 的诞生和 Sping 框架的发展息息相关。时间回到2002年,当时正是 Java EE 和 EJB 大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个美国的小伙子认为 EJB 太过臃...原创 2019-03-21 16:23:24 · 89 阅读 · 0 评论 -
记一道简单的java面试题
这可能是历史上最简单的一道java面试题了。题目很简单,完成代码,判断一个整数是否是奇数:public boolean isOdd(int i)相信相当数量的人都已经在准备吐槽了,只要看过《编程珠玑》的人都知道这道题的答案和其中极为简单的道理。不过别着急骂街,不管你信不信,这道笔试题我拿到的答案好多都长这样:public boolean isOdd(int i) { ...原创 2019-03-18 11:31:18 · 264 阅读 · 1 评论 -
springboot配置Druid数据源
springboot整合篇前言对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringData的方式进行统一管理,添加大量的自动配置,屏蔽了很多设置。引入了各种XxxTemplate和XxxRepository来简化我们队数据访问层的操作。springboot2.0默认是用com.zaxxer.hikari.HikariDataSource作为数据源。...原创 2019-03-13 11:39:23 · 266 阅读 · 0 评论 -
Java 趣史-差点把 Java 命名成了 Silk(丝绸)
差点把 Java 命名成了 Silk(丝绸)Java 命名的由来Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关:如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans(对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡。Java的名字如何得来,主要两种说法,一种是开发小组开会讨论名字未果,于是...原创 2019-03-25 15:14:14 · 145 阅读 · 0 评论 -
docker-compose快速搭建 Prometheus+Grafana监控系统
一、说明Prometheus负责收集数据,Grafana负责展示数据。其中采用Prometheus 中的 Exporter含:1)Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。2)cAdvisor,负责收集容器数据。它将以容器方式运行在所有 host 上。3)Alertmanager,负责告警。它将以容器方式运行在所有 host...原创 2019-03-29 15:17:35 · 3919 阅读 · 0 评论 -
给你一份Spring Boot核心知识清单
在过去两三年的 Spring 生态圈,最让人兴奋的莫过于 Spring Boot 框架。或许从命名上就能看出这个框架的设计初衷:快速的启动 Spring 应用。因而 Spring Boot 应用本质上就是一个基于 Spring 框架的应用,它是 Spring 对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于 Spring 生态圈的应用。那 Spring Boot 有...原创 2019-03-22 17:06:16 · 86 阅读 · 0 评论 -
来,带你鸟瞰 Java 中4款常用的并发框架!
1. 为什么要写这篇文章几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。类似地,去年RxJava 和 Spring Reactor...原创 2019-03-26 16:50:21 · 1014 阅读 · 0 评论 -
分布式之数据库和缓存双写一致性方案解析
引言为什么写这篇文章?首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的文章,对这几种方案进行解析。于是小编战战兢兢,顶着被大家喷的风险,写了这篇文章。文章结构本文...原创 2019-03-30 16:19:41 · 74 阅读 · 0 评论 -
看Spring Data如何简化数据操作
Spring Data 概述Spring Data用于简化数据库访问,支持NoSQL 和 关系数据存储,其主要目标是使数据库的访问变得方便快捷。SpringData 项目所支持 NoSQL 存储:MongoDB (文档数据库)Neo4j(图形数据库)Redis(键/值存储)Hbase(列族数据库)SpringData 项目所支持的关系数据存储技术:JDBCJPASpri...原创 2019-04-04 14:17:55 · 201 阅读 · 0 评论 -
springboot+redis分布式锁-模拟抢单
本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使用她;本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker;本篇内容节点如下:jedis的nx生成锁 如何删除锁 模拟抢单动作(10w个人开抢)jedis的nx生成锁对于java中想操作redis,好的方式是使用jedis,首先pom中引入依赖:1 ...原创 2019-04-04 16:40:23 · 130 阅读 · 0 评论 -
为什么祖传代码被称为“屎山”?
任何设计人员,你几年之后再来看自己现在的作品,你就会觉得简直就是狗屎,拿出来真tm丢人。如果你没有这种感觉,那说明你这行干不久了。说到祖传代码不得不提之前在知乎上看到的两位网友的经历:一我刚入职第一天,旁边的妹纸告诉我,你是今年第五个负责这个模块的,心里凉了半截,这TMD才七月份啊,听她说最长的干了两个月。我就不信那个邪,页面交互一般,后端不也就增删改查?能难到哪里去。看了...原创 2019-03-24 14:27:28 · 374 阅读 · 0 评论 -
阿里JAVA面试题剖析:一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?
面试原题一般实现分布式锁都有哪些方式?使用 redis 如何设计分布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?面试官心理分析其实一般问问题,都是这么问的,先问问你 zk,然后其实是要过度到 zk 关联的一些问题里去,比如分布式锁。因为在分布式系统开发中,分布式锁的使用场景还是很常见的面试题剖析Redis 分布式锁官方叫做 RedLock...原创 2019-04-10 10:49:08 · 269 阅读 · 0 评论 -
深入理解 Java 反射和动态代理
简介什么是反射反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。通过反射机制,可以在运行时访问 Java 对象的属性,方法,构造方法等。反射的应用场景反射的主要应用场景有:开发通用框架 - 反射最重要的用途就是开发各种通用框架。很多框架(比如 Spring)都是配置化的(比如通过 ...原创 2019-03-27 15:02:12 · 158 阅读 · 0 评论 -
Netty源码分析之IO事件
IO事件概述在上节我们知道Netty启动后会动起一个selector线程监听IO事件,IO事件包括以下几个:SelectionKey.OP_READ 读操作位触发读事件 SelectionKey.OP_WRITE 写操作位触发写事件 SelectionKey.OP_ACCEPT 接收操作位触发接收事件 SelectionKey.OP_CONNECT 连接操作位触发连接事件读事件...原创 2019-04-01 11:03:45 · 188 阅读 · 0 评论 -
老大难的 Java ClassLoader 再不理解就老了
ClassLoader 做什么的?顾名思义,它是用来加载 Class 的。它负责将 Class 的字节码形式转换成内存形式的 Class 对象。字节码可以来自于磁盘文件 *.class,也可以是 jar 包里的 *.class,也可以来自远程服务器提供的字节流,字节码的本质就是一个字节数组 []byte,它有特定的复杂的内部格式。有很多字节码加密技术就是依靠定制 ClassLoader...原创 2019-03-28 15:48:32 · 122 阅读 · 0 评论 -
深度剖析Spring Cloud底层原理
毫无疑问,Spring Cloud 是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对 Spring Cloud 功能使用的层面,其底层的很多原理,很多人可能并不知晓。实际上,Spring Cloud 是一个全家桶式的技术栈,它包含了很多组件。本文先从最核心的几个组件,也就是 Eureka、Ribbon、Feign、Hystrix、Zuul 入手,来剖析其...原创 2019-04-11 11:21:49 · 158 阅读 · 0 评论 -
Java是如何实现平台无关性(跨平台)的?
相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因。那么,到底什么是平台无关性?Java又是如何实现平台无关性的呢?本文就来简单介绍一下。1什么是平台无关性平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行(Write Once ,Run Any...原创 2019-04-02 15:59:23 · 1752 阅读 · 0 评论 -
JAVA基础学习之-AQS的实现原理分析
AbstractQueuedSynchronizer是JUC的核心框架,其设计非常精妙。 使用了Java的模板方法模式。 首先试图还原一下其使用场景:对于排他锁,在同一时刻,N个线程只有1个线程能获取到锁;其他没有获取到锁的线程被挂起放置在队列中,待获取锁的线程释放锁后,再唤醒队列中的线程。线程的挂起是获取锁失败时调用Unsafe.park()方法;线程的唤醒是由其他线程释放锁时调用Unsa...原创 2019-04-08 14:40:22 · 130 阅读 · 0 评论 -
Spring和SpringBoot比较,解惑区别
1、概述:对于Spring和SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习SpringBoot的我当时也是一头雾水,随着经验的积累、我慢慢理解了这两个框架到底有什么区别,我相信对于用了SpringBoot很久的开发人员来说,有绝大部分还不是很理解SpringBoot到底和Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法!2、...原创 2019-04-02 17:58:58 · 47985 阅读 · 4 评论 -
Spring MVC工作流程及简单搭建
首先客户端提交请求,请求包含URL以及可能的内容信息。这些将会被传递给DispatcherServlet。Spring MVC的所有请求都会通过DispatcherServlet。它将请求委托给应用程序的其他组件来执行实际的处理。 DispatcherServlet需要将请求发给控制器(Controller),DispatcherServlet通过URL来查询处理器映射(Handler M...原创 2019-04-08 16:49:12 · 90 阅读 · 0 评论 -
Java面试题—内部类和静态内部类的区别
内部类:1、内部类中的变量和方法不能声明为静态的。2、内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B()。3、内部类可以引用外部类的静态或者非静态属性及方法。静态内部类:1、静态内部类属性和方法可以声明为静态的或者非静态的。2、实例化静态内部类:B是A的静态内部类,A.B b = new A.B()。3、静态内部类只能引用外部类的静态的属性及...原创 2019-04-09 11:13:19 · 234 阅读 · 0 评论 -
Restful架构思想
java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢。通常是让java作为一个app的服务端,为app客户端提供数据,做业务逻辑,所以我们用java来写接口,app客户端访问接口返回json文件进行解析,最后实现业务逻辑。这种方式就是我们通常所说的restful架构风格的api。 restful是一...原创 2019-04-09 16:20:03 · 181 阅读 · 0 评论 -
Mysql系统知识梳理
1 数据库分类 MySQL Oracle redis2 MySQL 存储引擎有哪些 ENGINE=InnoDB 提供事务安全表,支持外键。 MyISAM Memory数据存入内存中,如果内存出现异常或事重启关机,所有数据都会消失3 事务 概念:逻辑上的一组sql语句,组成这组操作的sql语句,要么成功,要么失败。3.1 事务四大特性ACID 原子性...原创 2019-04-03 19:34:55 · 97 阅读 · 0 评论 -
SpringBoot基于AOP实现自定义非空验证的注解
为了避免对大量参数进行过多的非空校验,我们可以自定义一个非空验证的注解,因为spring自带的@RequestParam并不能对参数进行非空准备工作首先需要创建一个spring boot项目,并引入相关maven依赖,pom文件如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven...原创 2019-04-09 19:37:58 · 1102 阅读 · 0 评论 -
死磕 java集合之HashSet源码分析
问题(1)集合(Collection)和集合(Set)有什么区别?(2)HashSet怎么保证添加元素不重复?(3)HashSet是否允许null元素?(4)HashSet是有序的吗?(5)HashSet是同步的吗?(6)什么是fail-fast?简介集合,这个概念有点模糊。广义上来讲,java中的集合是指java.util包下面的容器类,包括和Collecti...原创 2019-04-16 14:40:51 · 90 阅读 · 0 评论 -
什么是消息队列?
一、什么是消息队列?消息队列不知道大家看到这个词的时候,会不会觉得它是一个比较高端的技术,反正我是觉得它好像是挺牛逼的。消息队列,一般我们会简称它为MQ(Message Queue),嗯,就是很直白的简写。我们先不管消息(Message)这个词,来看看队列(Queue)。这一看,队列大家应该都熟悉吧。队列是一种先进先出的数据结构。在Java里边,已经实现了不少的队列...原创 2019-04-13 15:13:38 · 154 阅读 · 0 评论 -
死磕 java集合之ConcurrentSkipListMap源码分析——发现个bug
简介跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。存储结构跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。源码分析主要内部类内部类跟存储结构结合着来看,大概能预测到代码的组织方式。// 数据节点,...原创 2019-04-16 17:29:37 · 114 阅读 · 0 评论 -
SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
前言本篇文章主要讲述的是SpringBoot整合Mybatis、Druid和PageHelper并实现多数据源和分页。其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了,这里就不过多说明了。重点是讲述在多数据源下的如何配置使用Druid和PageHelper 。Druid介绍和使用在使用Druid之前,先来简单的了解下Druid。Druid是一个数据库...原创 2019-04-16 19:37:02 · 812 阅读 · 0 评论 -
Redis集群管理
1.简介Redis在生产环境中一般是通过集群的方式进行运行,Redis集群包括主从复制集群和数据分片集群两种类型。*主从复制集群提供高可用性,而数据分片集群提供负载均衡。*数据分片集群中能实现主从复制集群的功能。2.Redis主从复制集群主从复制集群中由Master节点提供读写服务,Slave节点负责同步Master节点中的数据,当...原创 2019-04-21 14:08:27 · 116 阅读 · 0 评论 -
面试官:你分析过SpringMVC的源码吗?
1. MVC使用在研究源码之前,先来回顾以下springmvc是如何配置的,这将能使我们更容易理解源码。1.1 web.xml 1 <servlet> 2 <servlet-name>mvc-dispatcher</servlet-name> 3 <servlet-class>org.springframewo...原创 2019-04-21 16:57:36 · 368 阅读 · 0 评论 -
并发系列(1)之 Thread 详解
一、线程概述对于 Java 中的线程主要是依赖于系统的 API 实现的,这一点可以从java.lang.Thread;源码中关键的方法都是native方法看出,也可以直接查看 OpenJDK 源码看出来,这一点后面还会讲到;对于 JDK1.8 而言,他的 Windows 版和 Linux 版使用的都是1:1 线程模型,即系统内核线程和轻量级进程的比是1:1;内核线程(Kernel...原创 2019-04-25 19:05:38 · 234 阅读 · 0 评论 -
spring事务传播行为之使用REQUIRES_NEW不回滚
最近写spring事务时用到REQUIRES_NEW遇到一些不回滚的问题,所以就记录一下。场景1:在一个服务层里面方法1和方法2都加上事务,其中方法二设置上propagation=Propagation.REQUIRES_NEW,方法1调用方法2并且在执行完方法2后抛出一个异常,如下代码 1 @Service 2 public class BookServiceImpl impleme...原创 2019-04-21 19:25:37 · 1115 阅读 · 0 评论 -
并发系列(2)之 ThreadLocal 详解
一、使用场景通常情况下避免多线程问题有三种方法:不使用共享状态变量; 状态变量为不可变的; 访问共享变量时使用同步;而 ThreadLocal 则是通过每个线程独享状态变量的方式,即不使用共享状态变量,来消除多线程问题的,例如:@Slf4j public class TestThreadlocal { private static ThreadLocal<String...原创 2019-04-26 10:57:18 · 156 阅读 · 0 评论