![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 79
Java架构闲谈
这个作者很懒,什么都没留下…
展开
-
你应该这样理解JVM内存管理
在进行Java程序设计时,一般不涉及内存的分配和内存回收的相关代码,此处引用一句话: Java和C++之间存在一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外的人想进去,墙里面的人想出来 ,个人从这两句话中,捕获到了 两个点 。获取java资料 加群:874811168java的自动内存管理机制,极大的节省了开发人员的精力,避免了易错且复杂的内存管理设计,相对于手动的内存管理这是极大的飞跃。...原创 2018-09-18 17:39:48 · 148 阅读 · 0 评论 -
深入理解Java虚拟机之类运行时栈帧结构
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的...原创 2018-09-19 15:54:54 · 245 阅读 · 0 评论 -
【面试必备】透过源码角度一步一步带你走近阿里
一 先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下:/*** 默认初始容量大小*/private static final int DEFAULT_CAPACITY = 10;private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};/** *默认构造函...原创 2018-09-19 19:18:24 · 165 阅读 · 0 评论 -
从普通Java程序员到阿里高级架构师,他用了六年!
六年间,这位架构师待过四大门户中的两家,完成了工程师到架构师的蜕变。经手多款从零到一产品的开发和增长,也经历国内最大社交平台亿级流量和用户的架构设计及优化工作。工作上思路清晰、认真负责,是同事们心目中优秀 Problem Solver。工作年限:8 年服务公司:4 家(含四大门户中的两家)最近职业:Java 架构师职场关键词:社交平台、高并发系统架构设计、技术团队管理、多款从零到一的产品城...原创 2018-09-25 15:02:34 · 215 阅读 · 0 评论 -
揭开java内存模型的神秘面纱
java并发采用的是共享内存模型,线程之间的通信对程序员来说是透明的,内存可见性问题很容易困扰着java程序员,今天我们就来揭开java内存模型的神秘面纱。在揭开面纱之前,我们需要认识几个基础概念:内存屏障(memory Barriers),指令重排序,happens-before规则,as-if-serial语义。什么是 Memory Barrier(内存屏障)?内存屏障,又称内存栅栏,是...原创 2018-09-19 21:45:10 · 116 阅读 · 0 评论 -
最近刷爆朋友圈的一道面试题
前言:最近在网上有一道面试题掀起了劲爆的浪潮,好多家公司都模仿提问了这么一道面试题,而且好多人也都在讨论这道面试题要是自己回答的话该怎么回答!这道题也是在个网站上刷爆了。面试题如果不用Spring,你打算怎么做开发工作?就是这么一道spring面试题,要是面试官问你,你该如何回答?答案各有千秋,接下来看看网友们是怎么说的。开源动弹知乎度娘问答社区看了这些截图,相信你们自己...原创 2018-09-25 20:12:52 · 450 阅读 · 0 评论 -
关于Java面试,你应该准备这些知识点
自天子以至于庶人,壹是皆以修身为本《礼记·大学》马老师说过,员工的离职原因很多,只有两点最真实:钱,没给到位心,受委屈了当然,我是想换个平台,换个方向,想清楚为什么要跳槽,如果真的要跳槽,想要拿到一个理想的offer,除了运气,基本功也要足够的扎实,希望下面的面试经验能给你们能够提供一些帮助。项目经验面试官在一开始会让你进行自我介绍,主要是想让你介绍一下自己做过的一些项目,看看你对这...原创 2018-09-20 14:03:33 · 152 阅读 · 0 评论 -
通往架构师路上的经验总结
前言:我先介绍一下我的新同事,据说他是美国篮球运动员詹姆斯的死忠粉,公司好多同事都这么叫他James,有8年开发经验的架构师,之前在AL待过,我一听说是AL的,啧啧啧…,就有种莫名的种亲切感,就立马找新同事聊了起来。我们在空余的时间聊了很久,也聊了好多。毕竟之前都在AL待过,感觉话题还是有的。在聊天过程中,我们也聊到了他为什么离开AL,也聊到了他在成为架构师的道路上的辛酸历程,聊过后,才发现,...原创 2018-09-20 19:23:33 · 196 阅读 · 0 评论 -
高性能MySQL之创建高性能的索引
首先我们要认识到索引的各种类型;并在认识的基础上进行对比;B-Tree索引;存储引擎的不同,会用到不同的技术;MyISAM使用前缀压缩技术使得索引更小;InnoDB则按照数据格式进行存储;MyISAM索引通过数据的物理位置引用被索引的行;InnoDB根据主键引用被索引的行;对于B-Tree索引的自我总结和概括:简单地说呢,就相当于我们的书本目录一样了,而InnoDB的索引就是根据...原创 2018-10-02 18:13:18 · 96 阅读 · 0 评论 -
阿里十年架构经验总结的Java学习体系
Java学习这一部分其实是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学!一、分布式架构架构分布式的英文( Distributed computing 分布式计算技术)的应用和工具,...原创 2018-09-26 21:06:49 · 484 阅读 · 2 评论 -
这样看java内存模型其实很简单
java内存模型,简称JMM(Java Memory Model), 个人对于JMM理解是:JVM屏蔽了操作系统对于物理内存访问的复杂性,目的从软件设计角度呈现出的一种内存访问的逻辑视图 。也就是JMM是JVM为软件工程师提供的一系列内存访问的逻辑规则,理解并合理使用这些规则就能正确访问内存,至于底层和物理内存直接交互动作已经被透明化了,无须关心。下图是JMM内存模型视图,是内存访问规则的基础。...原创 2018-09-21 14:48:52 · 227 阅读 · 0 评论 -
Java并发编程-CountDownLatch
1、 应用场景CountDownLatch是并发包中用来控制一个或者多个线程等待其他线程完成操作的并发工具类。现以工作中的一个场景来描述下CountDownLatch的应用,代码如下:/*模拟工作中的一个需求场景:用户会选择多个算法来计算费用,最后会将所有算法计算出的费用做一个加权求平均数,这个平均数是最终的费用。每个算法的复杂度都不一样,打算每个线程负责一个算法的实现,所有的线程执行完成...原创 2018-10-03 22:38:05 · 187 阅读 · 0 评论 -
普通程序员,三年成为年薪70w架构师,只因做到了这些
每个程序员、或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来。今天给大家分享的是一篇来自阿里Java架构师对普通程序员的职业建议,希望对你有启发。程序员的三个阶段第一阶段-——三年我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容...原创 2018-09-21 20:51:22 · 1446 阅读 · 0 评论 -
JVM自定义类加载器加载指定classPath下的所有class及jar
一、JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器。 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责JAVA_HOME/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作。 2.其他类加载器:由java实现,可以在方法区找到其Class对象。这里又...原创 2018-10-04 22:05:13 · 5971 阅读 · 0 评论 -
80%的程序员不了解的调试技巧
程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上。甚至说不是在调试代码,就是即将调试代码。原创 2018-09-27 19:34:51 · 1086 阅读 · 0 评论 -
RabbitMQ使用
说明 在企业应用系统领域,会面对不同系统之间的通信、集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要。其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方,比如发送短信,邮件提醒,更新文章阅读计数,记录用户操作日志等等,如果实时处理的话,在用户访问量比较大的情况下,对系统压力比较大。面对这些问题,我们一般会将这些请求,放在消息队列MQ中处理;异构系统...原创 2018-10-05 21:50:13 · 136 阅读 · 0 评论 -
利用VisualVm和JMX远程监控Java进程
自Java 6开始,Java程序启动时都会在JVM内部启动一个JMX agent,JMX agent会启动一个MBean server组件,把MBeans(Java平台标准的MBean + 你自己创建的MBean)注册到它里面,然后暴露给JMX client管理。简单来说就是每个Java程序都可以通过JMX来被JMX client管理,而且这一切都是自动发生的。而VisualVm就是一个JMX C...原创 2018-10-12 20:52:29 · 4686 阅读 · 0 评论 -
JAVAORM框架之MYBATIS篇(IBATIS)
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了解)Java体系。使Java的各种后端技术在你心中模块化;让你在工作中能将Java各个技术了然于心;能够即插即用。本章我们来一起了解ORM(对象关系映射关系)框架之Mybatis(Ib...原创 2018-09-28 14:47:47 · 540 阅读 · 0 评论 -
Java 读写锁实现原理
最近做的一个小项目中有这样的需求:整个项目有一份config.json保存着项目的一些配置,是存储在本地文件的一个资源,并且应用中存在读写(读>>写)更新问题。既然读写并发操作,那么就涉及到操作互斥,这里自然想到了读写锁,本文对读写锁方面的知识做个梳理。为什么需要读写锁?与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结起来为:读读不互斥,读写互斥,写写互斥,而一般的独占...原创 2018-09-28 21:12:45 · 221 阅读 · 0 评论 -
分布式系统关注点——初识「高可用」
本篇的要点主要是明确「高可用」的定义,以及了解在分布式系统下哪些环节要做「高可用」,为后续要讲的策略、方式方案打下基础。如有1年以上的分布式系统实战经验可酌情选择跳过本篇。Tips:「高XX」中的“高”其实是相对的,越满足期望值,就越是“高”的。一、「高可用」的作用?首先,统一下对「高可用」的认知。 做个通俗一点的类比:独生子女时代的子女就是“单体应用”,如果出意外了,父母就「失独」...原创 2018-10-08 14:14:51 · 126 阅读 · 0 评论 -
MyBatis框架原理4:插件
插件的定义和作用首先引用MyBatis文档对插件(plugins)的定义:MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)Par...原创 2018-09-29 14:21:23 · 176 阅读 · 0 评论 -
为什么我们做分布式使用Redis?
绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里对 Redis 常见问题做一个总结,解决大家的知识盲点。1、为什么使用 Redis在项目中使用 Redis,主要考虑两个角度:性能和并发。如果只是为了分布式锁这些其他功能,还有其他中间件 Zookpeer 等代替,并非一定要使用 Red...原创 2018-09-29 16:11:57 · 95 阅读 · 0 评论 -
分布式系统关注点——仅需这一篇,吃透「负载均衡」妥妥的
一、「负载均衡」是什么正如题图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是「负载均衡」,它的本质和「分布式系统」一样,是「分治」。 如果大家习惯了开车的时候用一些导航软件,我们会发现,导航软件的推荐路线方案会有一个数量的上限,比如3条、5条。因此,其实本质上它也起到了一个类似「负载均衡」的作用,因为如果只能取Top3的通畅路线,自然拥堵严重的路线就无法推荐给你了,使...原创 2018-10-08 19:58:47 · 149 阅读 · 0 评论 -
java对象的序列化和反序列化
引言: 序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其带你过去的状态写入到临时或持储存区,反序列化就是重新创建对象的过程,此对象来自于临时或持久储存区。序列化的作用: 就好比如存储数据到数据库,将一些数据持久化到数据库中,而有时候需要将对象持久化,虽然说将对象状态持久化的方式有很多,但是java给我们提供了一种很便捷的方式,那就是序列化,序列化可以实现对...原创 2018-09-29 20:52:18 · 216 阅读 · 0 评论 -
Ribbon 框架简介及搭建(没有与SpringCloud整合,独立使用)
Ribbon简介负载均衡框架,支持可插拔式的负载均衡规则支持多种协议,如HTTP、UDP等提供负载均衡客户端Ribbon子模块ribbon-core(ribbon的核心,主要包含负载均衡器、负载均衡接口、客户端接口、内置负载均衡实现API)ribbon-eureka(为eureka客户端提供的客户端实现类)ribbon-httpclient(为负载均衡提供...原创 2018-10-18 20:58:37 · 1538 阅读 · 0 评论 -
通过线程编写一个简单的并发服务器
概述之前在上一节通过使用fork来实现了一个并发程序,它很经典但是效率不高主要是太消耗资源因为fork一个进程的开销很大,假如100客户端连接就需要100个进程,这样不是不可以只是这种方式不太高级,下面我们通过使用线程来实现并发,因为产生一个线程的开销要小的多,当然对于大规模并发的场景使用线程也不是最好的选择,但是学习socket编程的过程中这些东西是需要了解的。代码段服务器端通过线程编写...原创 2018-09-30 14:51:10 · 178 阅读 · 0 评论 -
Nginx可以做什么?看完这篇你就懂了
本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流。Nginx能做什么——反向代理——负载均衡——HTTP服务器(动静分离)——正向代理以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做。反向代理反向代理应该是Nginx做的最...原创 2018-10-15 22:36:27 · 214 阅读 · 0 评论 -
分布式锁与实现(一)基于Redis实现
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...原创 2018-10-09 14:20:56 · 117 阅读 · 0 评论 -
java实现多线程的两种方式
Java需要并发控制三个原因:多线程环境存在共享资源多个线程操作(修改)共享资源下面分别用继承Thread类和实现Runnable接口俩种方式实现并发控制,继承Thread类继承Thread类方式,最后创建对象是因为会是三个不同的线程对象,所以需要将共享资源和锁都静态化,如果不这样的话,就不存在共享资源一说了,自然也没有并发控制的说法。class MyThread extends T...转载 2018-09-30 19:25:13 · 147 阅读 · 0 评论 -
J2Cache 和普通缓存框架有何不同,它解决了什么问题?
不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!目前缓存的解决方案一般有两种:内存缓存(如 Ehcache) —— 速度快,进程内可用集中式缓存(如 Redis)—— 可同时为多节点提供服务现有的缓存框架已经非常成熟而且优秀...原创 2018-10-10 15:15:58 · 1182 阅读 · 0 评论 -
Java并发(9)- 从同步容器到并发容器
引言容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线程安全的,即在多线程的环境下,都需要其他额外的手段来保证数据的正确性,最简单的就是通过synchronized关键字将所有使用到非线程安全的容器代码全部同步执行。这种方式虽然可以达到线程安全的目的,但存在几个明...原创 2018-10-17 15:31:24 · 113 阅读 · 0 评论 -
Redisson分布式锁实现
1. 基本用法 org.redisson redisson 3.8.2Config config = new Config();config.useClusterServers() .setScanInterval(2000) // cluster state scan interval in milliseconds .addNodeAddress...原创 2018-10-22 17:50:45 · 381 阅读 · 0 评论 -
阿里「Java架构师」 所需要的知识 、评级P6!
选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。图片描述一、Java编程入门类对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快...原创 2018-10-23 22:22:51 · 353 阅读 · 0 评论 -
写好JavaScript条件语句的5个技巧
1、使用Array.includes处理多种条件让我们来看一下的例子:// conditionfunction test(fruit) {if (fruit == ‘apple’ || fruit == ‘strawberry’) {console.log(‘red’);}}一眼看去,以上的例子貌似没有什么问题。但是,如果我们加入更多的红色水果,比如车厘子(cherry)和蔓越橘(cr...原创 2018-10-29 14:01:03 · 157 阅读 · 0 评论 -
Java并发--- 简单聊聊JDK中的七大阻塞队列
JDK中除了上文提到的各种并发容器,还提供了丰富的阻塞队列。阻塞队列统一实现了BlockingQueue接口,BlockingQueue接口在java.util包Queue接口的基础上提供了put(e)以及take()两个阻塞方法。他的主要使用场景就是多线程下的生产者消费者模式,生产者线程通过put(e)方法将生产元素,消费者线程通过take()消费元素。除了阻塞功能,BlockingQueue接...原创 2018-10-26 14:27:48 · 466 阅读 · 0 评论 -
微服务架构下静态数据通用缓存机制
在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验,尝试理清其中存在的关键问题以及探寻通用的解决之道。什么是静态数据这里静态数据是指不经常发生变化或者变化频率比较低的数据,比如车型库、用户基本信息、车辆基本信息等,车型库这种可能每个月会更新一次,用户和车辆基本信息的变化来源于用户注册、修改,这个操作的频...原创 2018-10-29 20:56:08 · 221 阅读 · 0 评论 -
高性能消息中间件——NATS
前 言这段时间我的主要工作内容是将公司系统中使用的RabbitMQ替换成NATS,而此之前我对Nats一无所知。经过一段时间紧张的学习和开发之后我顺利的完成了任务,并对消息中间件有了更深的了解。在此感谢同事钟亮在此过程中对我的帮助。NATS属于比较小众的一款中间件产品,中文资料基本上是没有的,故写以记之,为想学习Nats的同学提供一点帮助。在介绍NATS之前先了解下什么是分布式系统和消息中间件...原创 2018-10-26 21:22:27 · 2618 阅读 · 0 评论 -
Java性能问题定位
一句话总结:从问题现象为入口,归结为3类问题进行定位分析:内存满、CPU高、线程阻塞。首先先介绍下jvisualvm这款jdk自带的性能工具。通常我们要定位哪块代码性能差,耗时久,最原始的办法就是在各个方法前后日志打印时间戳并计算耗时,这种方法很繁琐,通常要加很多日志多次部署才能定位到,我一开始也是这么搞的。而使用jvisualvm工具则可以直接查看整个业务代码调用链中各个方法的耗时及占比,直接...原创 2018-10-27 14:01:03 · 774 阅读 · 0 评论 -
redis 系列7 数据结构之跳跃表
一.概述跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。在大部分情况下,跳跃表的效率可以和平衡树(关系型数据库的索引就是平衡树结构)相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序使用跳跃表来代替平衡树。Redis使用跳跃表作为"有序集合键"的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序...原创 2018-11-10 19:35:48 · 142 阅读 · 0 评论 -
程序员,你焦虑吗?
前言我很焦虑,请问程序员们,你焦虑吗?我是一名年过35的北漂程序员,我身边的朋友大多也是程序员。我总感觉到30岁以上的程序员充满了焦虑。“华为清退35岁以上老员工”、“中兴程序员坠楼”这些事件,更加重了程序员的焦虑。最近又有朋友都跟我抱怨他们的焦虑的事情,我仔细听完后发现,他们焦虑的居然是前途渺茫,妻离子散,家破人亡!朋友A的焦虑:前途渺茫A也是一名北漂程序员,最近在跟媳妇商量回老家发展...原创 2018-11-15 17:18:04 · 574 阅读 · 0 评论