前言   在[JAVA进阶架构师指南]系列二和三中,我们了解了JVM的内存模型以及类加载机制,其中在内存模型中,我们说到,从线程角度来说,JVM分为线程私有的区域(虚拟机栈/本地方法栈/程序计数器)和线程公有区域(方法区和java堆),其中线程私有区域内存随着线程的结束而跟着被回收,GC主要关注的是堆和方法区这部分的内存. GC回收算法   GC如何确定哪些对象需要回收呢?一般而言,有两种算法:引用计数算法和可达性分析算法. 引用计数算法   为每个对象都持有一个引用计数器,初试状态为0,该对象…
前言   本博客是长篇系列博客,旨在帮助想提升自己,突破技术瓶颈,但又苦于不知道如何进行系统学习从而提升自己的童鞋.笔者假设读者具有3-5年开发经验,java基础扎实,想突破自己的技术瓶颈,成为一位优秀的架构师,所谓java基础扎实,比如:   1.java语言三大特性.   2.java语言八大基本类型及其表示范围.   3.为什么float和double存在精度丢失?   4.publish/private/default/protected表示的范围?   5.static/final的用…
架构的定义 先来看看软件架构的普遍定义吧. 一个程序和计算系统软件体系结构是指系统的一个或多个结构.结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关系. 体系结构并非可运行软件.确切的说,它是一种表达,使软件工程师能够: 1.分析设计在满足规定需求方面的有效性. 2.在设计变更相对容易的阶段,考虑体系结构可能的选择方案. 3.降低与软件构造相关联的风险. 软件架构的生命周期 软件开发有其生命周期,它应该是:   而软件架构也有着其生命周期,它又是怎么样的呢?   软件架构的重要性 为…
前言   谈到JAVA,就不得不提JVM---JAVA程序员绕不开的话题.也许有童鞋会说,我不懂JVM,但是我一样可以写出JAVA代码,我相信说这种话的童鞋,往往是只有1-3年的初级开发人员,对JAVA理解还不深,不明白JVM的重要性,那接下来我们来说说,为什么要学习JVM?   1.理解JVM,才能帮助我们写出更好,更健壮的代码.举个例子,以下代码的执行结果会是什么呢?很多童鞋肯定会说:嗯?当我傻吗?两个不都是true吗?这有啥好说的,真的是这样吗?感兴趣的童鞋可以自己下来试一试,至于为什么是…
前言   首先给大家说声对不起,最近属实太忙了,白天上班,晚上加班,回家还要收拾家里,基本每天做完所有事儿都是凌晨一两点了,没有精力再搞其他的了.   好了,进入正题,让我们来聊聊JVM篇最后一个章节----JVM性能调优.童鞋们随便打开一个大厂的招聘岗位JD,应该都会有JVM调优相关的描述,其实招聘方不一定要求候选人真的对JVM调优有实际调优经验,但是至少得有思路,知道应该怎样进行JVM层面的性能调优,说实话,知道如何进行JVM层面的性能调优的人,在面试中确实是有加分的.   笔者在公司担任面…
Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有优秀的编码能力,解决开发人员无法解决的难题. 二. 架构师对系统的大数据容量高性能高并发高容错的网站有架构设计和开发经验. 三. 架构师对操作系统.数据库.服务器各种软件使用的配置比较了解,比如Linux.Web负载均衡.反向代理.数据库集群.容灾等比较了解. 四. 架构师对软件开发过程有清晰明确的…
作者:Srinath 翻译:贺卓凡,来源:公众号 ImportSource Srinath 通过不懈的努力最终总结出了 30 条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门. Srinath 认为架构师应该扮演的角色是一个引导者,讨论发起者,花草修建者,而不是定义者和构建者.Srinath 为了解决团队内部的架构纷争和抉择,制定了以下 30 条原则,这些原则被成员们广泛认可,也成为了新手架构师的学习途径. 基本原则 原则 1:KISS(Keep it si…
作者:Srinath 翻译:贺卓凡,来源:公众号ImportSource Srinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门. Srinath认为架构师应该扮演的角色是一个引导者,讨论发起者,花草修建者,而不是定义者和构建者.Srinath为了解决团队内部的架构纷争和抉择,制定了以下30条原则,这些原则被成员们广泛认可,也成为了新手架构师的学习途径. 基本原则 原则1:KISS(Keep it simple,sutp…
一.APP架构与WEB架构的最大不同 移动APP的架构和传统PC的WEB架构有三点不同: 1.连接的稳定性.在传统的web端连接成功后就可以认为它是稳定的,但在移动端.无线端,APP连接非常敏感,可能进出电梯.隧道.地铁,连接就会断,所以连接的稳定性是很显著的区别,也是很大的挑战. 2.流量的敏感性.传统PC和web的应用架构可能不太关注数据量.流量,但移动端.无线端,流量有限,用户非常关注.所以在架构和协议设计以及数据上,要给予非常重点的关注. 3.消息的可达性.在PC和web端一般认为消息发…
本文作者叫Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员. 他是Apache Axis2项目的联合创始人,也是Apache Software基金会的成员. 他是WSO2流处理器(wso2.com/analytics)的联席架构师. Srinath撰写了两本关于MapReduce和许多技术文章的书. 他获得了博士学位. 来自美国印第安纳大学. Srinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或…