
java
程序人生c
这个作者很懒,什么都没留下…
展开
-
JVM内存结构 VS Java内存模型 VS Java对象模型
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型和Java对象模型这三者的概念及其间的区别。甚至我见过有些面试官自己也搞...原创 2019-04-20 19:49:44 · 243 阅读 · 0 评论 -
JVM探索
介绍在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法。我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定性能瓶颈。我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看看用于提升Java应用程序性能的JVM调优技巧和架构调整。请注意,性能优化是一个很宽泛的话题,而本文只是对JVM探索的一个起点。性能...原创 2019-04-20 20:00:39 · 184 阅读 · 0 评论 -
为什么硅谷初级程序员工资堪比腾讯T3技术专家级
一说工资,相信很多人都很感兴趣,而且大多数人都对别人的工资比较感兴趣,特别是作为众所周知的“高收入”人群的程序员。自从互联网行业兴起之后,码农的地位直线上升。先来看一下美国的程序员工资,注意:这是初级程序员的年薪,单位是美元亚马逊94K,ORACLE101K、雅虎104K、谷歌105K、苹果105K、CISCO107K、Linked112K、Facebook113K、Twitter11...原创 2019-04-16 22:30:30 · 1349 阅读 · 0 评论 -
成为一名优秀的Java架构师应该具备哪些条件?
时光退回到七八年以前,那个时候“架构师“还是一个很“高大上“的title。可是在今天的互联网圈,随便一个工作了三、五年的开发人员,都可以称之为架构师。随便多翻几个招聘网站,你可以看到:前端架构师、后端架构师、Android架构师、iOS架构师、php架构师、运维架构师、DB架构师、搜索架构师、中间件架构师、大数据架构师。。。五花八门,不一而足。从这些岗位需求可以看出,“架构师“这个词其实是...原创 2019-04-25 19:46:33 · 1614 阅读 · 0 评论 -
详解Spring Cloud 微服务架构
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件。注:Spring Boot 简单理解就是简化 Spring 项目的搭建、配置、组合的框架。因为与构建微服务本身没有直接关系,所以本文不对 Spring Boot 进行展开。另外本文有一些例子涉及到 Spring 和 Spring Boot,建议先了解一下 Spring 和 ...原创 2019-04-25 19:55:53 · 420 阅读 · 0 评论 -
非常值得一看的35个Redis面试题总结
1.什么是redis?Redis 是一个基于内存的高性能key-value数据库。2.Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-V...原创 2019-04-21 19:53:35 · 223 阅读 · 0 评论 -
基于Redis分布式锁的实现
前言本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结分布式锁概览在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问,Java中我们一般可以使用synchronized语法和ReetrantLock去保证,这实际上是本地锁的方式。但是现在公司都是流行分布式架构,在分布式环境下,如何保证不同节点的线程同步执行呢...原创 2019-04-26 15:27:10 · 252 阅读 · 0 评论 -
Spring Boot 中关于自定义异常处理的套路!
在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案。Spring Boot 中,对异常的处理有一些默认的策略,我们分别来看。默认情况下,Spring Boot 中的异常页面 是这样的:我们从这个异常提示中,也能看出来,之所以用户看到这个页面,是因为开发者没有明确提供一个 /erro...原创 2019-04-17 18:57:33 · 209 阅读 · 0 评论 -
Java工程师应该如何规划职业生涯
很多人事程序员这个职业的人,在到了30岁以后就会有一大部分想要转行,为什么会出现这种情况呢?程序员无疑是个调薪行业,所有高薪行业都有围城现象,圈外人看高薪,圈内人看苦逼,而真正热爱的人,一定会走下去,直到牛气冲天,比如安全界的tomkeeper、黑哥都是医学界跨过来的大牛。另外一种原因,很多人是喜欢编程才干这一行的,但大多数人是为了糊口才来掺和一下的。混口饭吃和喜欢才去做是完全不同的,所能...原创 2019-04-17 19:52:43 · 343 阅读 · 0 评论 -
分布式系统面试题:分布式事务解决方案?
面试题分布式事务了解吗?你们是如何解决分布式事务问题的?面试题剖析一般来说,分布式事务的实现主要有以下 5 种方案:XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据...原创 2019-04-26 17:22:29 · 1037 阅读 · 0 评论 -
面试官:来给我说一下 Spring 中使用了那些设计模式?
又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类...原创 2019-04-26 20:15:21 · 358 阅读 · 0 评论 -
为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
面试题为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人设计的架...原创 2019-04-22 17:16:10 · 176 阅读 · 0 评论 -
你的系统如何支撑高并发?
高并发系统各不相同。比如每秒百万并发的中间件系统、每日百亿请求的网关系统、瞬时每秒几十万请求的秒杀大促系统。他们在应对高并发的时候,因为系统各自特点的不同,所以应对架构都是不一样的。另外,比如电商平台中的订单系统、商品系统、库存系统,在高并发场景下的架构设计也是不同的,因为背后的业务场景什么的都不一样。最简单的系统架构假设刚刚开始你的系统就部署在一台机器上,背后就连接了一台数据库,...转载 2019-04-22 17:25:27 · 197 阅读 · 0 评论 -
MySQL 性能调优的10个方法
MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言最近发展很快,PHP, Ruby, Python, Java 各有特点,虽然 NOSQL 最近越來越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储。 MYSQL 如此方便和稳定,以至于我们在开发 WEB 程序的时候很少想到它。即使想到优化也是程序级别的,比如,不要写过于消耗资源的 SQL 语句。但是除此...原创 2019-04-22 17:29:36 · 373 阅读 · 0 评论 -
MySQL面试题:如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题?
面试题你有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?考点分析高并发这个阶段,肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是 app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗?...原创 2019-04-22 17:37:35 · 247 阅读 · 0 评论 -
如何使用SpringBoot(API传参)
spring boot 传参spring boot 中的Controller或者RestController接收参数的方法是一样的。这章目标是对几种常用的传参都写个例子。创建package: com.biboheart.demos.api,这个包里放置API接口的RestController在com.biboheart.demos.api包中创建一个class: ParamControll...原创 2019-04-22 17:44:46 · 1015 阅读 · 0 评论 -
java架构——一些设计上的基本常识
1、API与SPI分离框架或组件通常有两类客户,一个是使用者,一个是扩展者。 API(Application Programming Interface)是给使用者用的, 而SPI(Service Provide Interface)是给扩展者用的。 在设计时,尽量把它们隔离开,而不要混在一起, 也就是说,使用者是看不到扩展者写的实现的。比如:一个Web框架,它有一个API接口叫Act...原创 2019-04-18 15:47:01 · 196 阅读 · 0 评论 -
Tomcat相关面试题,看这篇就够了!
Tomcat相关的面试题出场的几率并不高,正式因为如此,很多人忽略了对Tomcat相关技能的掌握。这次整理了Tomcat相关的系统架构,介绍了Server、Service、Connector、Container之间的关系,各个模块的功能,可以说把这几个掌握住了,Tomcat相关的面试题你就不会有任何问题了!另外,在面试的时候你还要有意识无意识的往Tomcat这个地方引,就比如说常...原创 2019-04-23 15:11:11 · 773 阅读 · 1 评论 -
掌握这些Redis知识点,面试官一定觉得你很NB(干货 | 建议珍藏)
是数据结构而非类型很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义。redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们按照合理的格式解码后,可以变成一个字符串,整数或对象,此时才具有数据类型。这一点必须要记住。所以任何东西只要能转化成字节数组(byte[])的,都可以存到redis里。管你是字符串、数字、对...原创 2019-04-18 15:57:17 · 187 阅读 · 0 评论 -
十分钟构建好 SpringBoot + SSM 框架
一. 创建项目选择 Spring Initiallizr添加最基本的几个依赖 Web,MySQL,MyBatis,其他需求可以后续再添加 ; 数据库选择了 MySQL二. 配置数据源数据源中存储了所有建立数据库连接的信息1. 配置 IDEA 数据源输入地址,端口,用户名,密码等等完成设置2. 配置 spring 数据源...原创 2019-04-18 17:36:39 · 208 阅读 · 0 评论 -
Spring Boot的基本操作
1. Spring的发展1.1. Spring1.x 时代在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。1.2.Spring2.x时代随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,...原创 2019-04-18 17:44:58 · 186 阅读 · 0 评论 -
图解Java线程的生命周期,看完再也不怕面试官问了
在 Java 初中级面试中,关于线程的生命周期可以说是常客了。本文就针对这个问题,通过图文并茂的方式详细说说。结合上图,线程的生命周期大致可分为以下五种状态:NEW- 新建 RUNNABLE- 等待被CPU调度 RUNNING- 正在运行 BLOCKED- 阻塞 TERMINATED- 结束一、NEW 状态NEW 状态表示线程被新建的状态,我们来看一段示...原创 2019-04-23 15:33:31 · 1728 阅读 · 1 评论 -
Spring经典面试题总结,附带答案!
一、一般问题1. 不同版本的 Spring Framework 有哪些主要功能?2. 什么是 Spring Framework?Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。 它是轻量级、松散耦合的。 它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序开发提供了一个有凝聚力的框架。 它可以集成其他框架,如 Structs、Hibernate、...原创 2019-04-23 22:16:40 · 801 阅读 · 0 评论 -
设计模式-静态工厂模式
静态工厂模式引言追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客...原创 2019-04-18 19:48:43 · 608 阅读 · 0 评论 -
聊聊架构
什么是架构聊架构当然要先说清楚什么是架构?这个问题的标准答案在知乎上有更权威更专业的回答。这里我只说说我自己的理解。往大了说,架构是为了满足具体的业务的发展而做出的一整套的解决方案。太抽象了,那就掰开了说,架构是一套解决方案,是能够满足所承载的业务可以持续发展的解决方案,即包含软件层面的框架链,当然包含硬件层面(目前不熟,暂时略过)。软件层面又区分出了大前端架构,后端架构,这些...原创 2019-04-18 19:56:12 · 706 阅读 · 0 评论 -
详解微服务:Spring Cloud原理及核心
Spring Cloud是什么鬼?Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通...原创 2019-04-19 16:15:35 · 374 阅读 · 0 评论 -
史上最全的Java并发面试题(干货|收藏)
多线程java中有几种方法可以实现一个线程?继承Thread类; 实现Runnable接口; 实现Callable接口通过FutureTask包装器来创建Thread线程; 使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService来管理前面的三种方式)。如何停止一个正在运行的线程?使用退出标志,使线...原创 2019-04-23 19:44:24 · 226 阅读 · 0 评论 -
分布式架构学习:RabbitMQ可靠性投递与生产实践
本章重点:可靠性投递1.确保消息发送到RabbitMQ服务器2.确保消息被正确的路由3.确保消息在队列正确地存储4.确保消息从队列正确地投递到消费者5.消费者回调6.补偿机制7.消息幂等性8.消息的顺序性可靠性投递首先需要明确,效率和可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率造成影响,如过是一些业务实时性要求不是特别高的场合,可以牺牲可靠性...原创 2019-04-19 16:53:32 · 213 阅读 · 0 评论 -
Java工程师架构学习—互联网公司分布式集群架构
一、小型公司网络架构狗子是某大学计算机专业本科应届毕业生,由于自己的技术不错,再加上互联网产业的巨大利润的驱使,狗子决定走上创业这条路,于是,狗子联合了同学二黑,鸡子,狗蛋等人花费了几个月的时间写出了一套网站,是关于足球资讯的pc端网站加上手机APP客户端。现在产品测试成功了,准备发布了,狗子想到了两个问题:1.网站需要服务器狗子之前所有的代码测试都是在本地服务器或者局域网上进行的...原创 2019-04-19 21:37:11 · 8326 阅读 · 0 评论 -
程序员如何走向架构师——思维导图
一、架构师是什么?要做什么?架构师:是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。架构师不是一个人,他需要建立高效的体系,带领团队去攻城略地,在规定的时间内完成项目。1 确认需求架构师要懂得用户需求,理解用户真正想要什么,这使得架构师必须要和分析人员不断沟通,反复确认需求规格说明书,以此来保证他精准清楚用户需求。「架构师会与很多人...原创 2019-04-19 20:00:07 · 1087 阅读 · 0 评论 -
是否一辈子仅靠技术生存
作为一个老程序员,当回过头来想一想自己,觉得特别想对那些初学JAVA技术的朋友说点心里话,希望你们能从我的体会中,多少受点启发。一个程序员正确的自我心态究竟是什么样?在中国你千万不要认为学习技术就可以换来稳定的生活和高的薪水待遇。 你更千万不要认为那些从事市场开发,跑腿的人,没有前途。不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人...原创 2019-04-24 16:08:40 · 257 阅读 · 0 评论 -
什么性格的人能当好的程序员?
看看你是不是能当好程序员的料!就按照0和1的说法来说,我分为正反两个面,正如标题所说的,我将性格分为黑和白。白:为乐观派、理想主义;黑:为悲观派、现实主义;其实这样分也有点牵强,毕竟它们之间其实是有交集的,我们先这样暂且规定吧。我遇到很多年轻有为的人,从接触Github或者工作中,也认识一些老辣的老手,他们往往可以一语命中核心问题,我在这些人中大致整理分析。先从自己开始往往...原创 2019-04-24 16:25:26 · 1418 阅读 · 0 评论 -
程序员的基本常识——职业篇
这个系列是《软技能》一书的摘抄整理。这本书名声在外,读过后发现并没有那么好。一来是内容比较水,废话太多;二来掺杂着大量的俗套励志段落,还包含一些不靠谱的建议(理财)。尽管如此,经过提纯后,书里还是有一些有价值的信息,可以算是程序员基本常识。对刚刚入行,或是打算做程序员的人来说会比较有帮助。这个系列会有 4 篇文章,分别对应职业、自我营销、学习和生产力 4 个主题。我会抽取书中有价值的部分,...原创 2019-04-24 16:37:10 · 745 阅读 · 0 评论 -
对于IT者的一些有价值的工作建议
不要过度工作努力工作是值得认可的,但是长时间工作,而不是放松、休息,就会降低工作的效率。如果你喜欢自己现在的工作,或者为了赶进度不得不长时间工作,是可以的,但不要让过度工作形成一种习惯。你要时刻反省自己:是否在低效工作、是否已经累了需要休息放松,毕竟除了工作成果,创造力也是衡量一个人价值的重要指标。而长时间超负荷工作,不仅有损健康,也是不利于激发创造力的。最应该避免的,是跟风加班。...原创 2019-04-24 17:00:33 · 1702 阅读 · 0 评论 -
SpringBoot之全局异常处理
异常处理问题分析异常如何处理问题引入针对代码中的异常,常规有两种处理方式,一种throws直接抛出,另一种try..catch捕获。 在java项目中,有可能存在人为逻辑的异常,也可能为取得异常的详情,或是保证程序在异常时继续向下执行,会采用第二种处理方式。 但是,代码中每一处异常都来捕获,会使代码什么冗余且不利于维护。解决思路定义一个全局异常处理类,返回统一规范的异常信息;...原创 2019-04-24 17:11:34 · 228 阅读 · 0 评论 -
Java程序员必须掌握的Spring依赖管理原理
Spring依赖注入依赖注入(Dependency Injection)的意思就是对象通过构造器函数参数,工厂方法的参数,或者成员属性,定义了对象的依赖对象;容器在创建该对象时会负责注入这些依赖。这个过程是控制反转的,即不是由即将创建的对象来管理自己的依赖的发现和实例化,而是有Spring容器来实现。在Spring中依赖注入有两种形式,第一种就是基于构造函数的注入,即通过调用构造函数,传入...原创 2019-04-24 17:26:13 · 283 阅读 · 0 评论 -
面试官:Spring中用了哪些设计模式?
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。好了,话不多说,开始今天的内容。spring中常用的设计模式达到九种,我们举例说明。以后再也不怕面试官问我:Spring中用了哪些设计模式了。1简单工厂模式又叫做静态工厂方法(StaticF...原创 2019-04-24 17:46:10 · 202 阅读 · 0 评论 -
什么是分布式锁
分布式锁 分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。 举个不太恰当的例子:假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人,分布式锁就是保证这个房子只有一个门并且一次只有一个人可以进,而且门只有一把钥匙。然后许多人要去看书,可以,排队,第一个人拿着钥匙把门打开进屋看书并且把门锁上,然后第二个人没有钥匙,那就等着,等第一个出来...原创 2019-04-24 18:00:32 · 253 阅读 · 0 评论 -
浅谈 Redis 数据结构
前言Redis 数据库里面的每个键值对都是由对象组成的,其中数据库的键总是一个字符串对象(string object),数据库的值则可以使字符串对象、列表对象(list object)、哈希对象(hash object)、集合对象(set object)和有序集合对象(sorted object)这五种数据结构。下面我们一起来看下这些数据对象在 Redis 的内部是怎么实现的,以及 Redis...原创 2019-04-24 21:10:39 · 182 阅读 · 0 评论 -
想进BAT大厂必须掌握的Java知识点
Java目前已经不仅仅是一门开发语言,而是一整套生态体系。作为一个Java程序员,既是幸运的,也是不幸的。幸运的是我们有很多轮子可以拿过来用,不幸的是我们有太多的轮子需要学习。但是,无论是日常工作还是面试问题,也都符合二八原则,即掌握20%的知识,就能解决80%的问题。那么,Java程序员必须掌握的20%知识点都有哪些呢?一般包括以下内容:Java基础知识,如集合类、IO、泛型等。...原创 2019-04-30 15:15:02 · 1004 阅读 · 0 评论