-
从单体架构、到SOA、再到微服务的架构设计详解
本文涉及的内容以及知识点如下: 1、单体架构 2、单体架构的拆分 3、SOA与微服务的区别 4、微服务的优缺点 5、微服务的消息 6、服务集成 7、数据的去中心化 单体架构 Web应用程序发展的早期,大部分web工程是将所有的功能模块(service side)打包到一起并放在一个web容器中运行,很多企业的Java应用程序打包为war包。其他语言(Ruby,Python或者C )写的程序也有类似…- 4.3k
- 0
-
分布式事务的解决方案详解
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务各方面与大家进行介绍。 事务 1.1 什么是事务 数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务拥有以下四个特性,习惯上被称为ACID特性: 原子性(Atom…- 5.5k
- 0
-
JVM面试题目和答案
JVM内存模型 首先我们来了解一下JVM的内存模型的怎么样的: 1.堆:存放对象实例,几乎所有的对象实例都在这里分配内存 堆得内存由-Xms指定,默认是物理内存的1/64;最大的内存由-Xmx指定,默认是物理内存的1/4。 默认空余的堆内存小于40%时,就会增大,直到-Xmx设置的内存。具体的比例可以由-XX:MinHeapFreeRatio指定 空余的内存大于70%时,就会减少内存…- 9.7k
- 0
-
分布式缓存Redis+Memcached经典面试题和答案
Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以持久化其数据 Redis支持哪几种数据类型? String、List、Set、Sorted Set、hashes Redis集群方案应该怎么做?都有哪些方案? 1.twemprox…- 8.2k
- 0
-
最全多线程经典面试题和答案
Java实现线程有哪几种方式? 1、继承Thread类实现多线程 2、实现Runnable接口方式实现多线程 3、使用ExecutorService、Callable、Future实现有返回结果的多线程 多线程同步有哪几种方法? Synchronized关键字,Lock锁实现,分布式锁等。 Runnable和Thread用哪个好? Java不支持类的多重继承,但允许你实现多个接口。所以如果你要继承…- 9.3k
- 0
-
Java经典基础与高级面试36题和答案
在Java面试的首轮,经常会问很多关于Java面试基础以及高级的问题,今天收集相关Java面试36题和答案分享出来。 1.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。 Java中static方法不能被覆盖,因…- 10k
- 0
-
分布式Session共享的4类技术方案,与优劣势比较
什么是session 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。 当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。…- 5.7k
- 0
-
MySQL行锁、表锁、悲观锁、乐观锁的特点与应用
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,从这一角度来说,锁对于数据库而言就显得尤为重要。 MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。 比如: MyISAM和MEMORY存…- 7k
- 0
-
性能优化策略详解(6大解决方案)
常见性能优化策略分类 1.代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次等。 2.数据库 …- 4.3k
- 0
-
开源搜索引擎Lucene、Solr、Sphinx等优劣势比较
开源搜索引擎分类 1.Lucene系搜索引擎,java开发,包括: Lucene Solr Elasticsearch Katta、Compass等都是基于Lucene封装。 你可以想象Lucene系有多强大。 2.Sphinx搜素引擎,c 开发,简单高性能。 以下重点介绍最常用的开源搜素引擎:Lucene、Solr、Elasticsearch、Sphinx的特点和优劣势选型比较。 Lucene …- 5.2k
- 0
-
BAT研发Java面试36题总结:Spring+Redis+Docker+Dubbo
一面: ArrayList和linkedlist区别。ArrayList是否会越界。 ArrayList和hashset有何区别。hashset存的数是有序的么。 volatile和synchronized区别 多态的原理 数据库引擎Innodb和myisam区别 Redis的数据结构 Redis是基于内存的么 Redis的list zset的底层实现 http和https的区别,tcp握手过程 …- 4.9k
- 0
-
什么是缓存雪崩?服务器雪崩的场景与解决方案
什么是应用服务雪崩 雪崩问题 分布式系统都存在这样一个问题,由于网络的不稳定性,决定了任何一个服务的可用性都不是 100% 的。当网络不稳定的时候,作为服务的提供者,自身可能会被拖死,导致服务调用者阻塞,最终可能引发雪崩连锁效应。 缓存雪崩 当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力,造成数据库后端故障,从而引起应用服务器雪崩。 雪…- 5k
- 0
-
Docker容器的原理、特征、基本架构、与应用场景
什么是容器? 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础…- 6.1k
- 0
-
详解Memcached、Redis等缓存的特征、原理、应用
随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的),如何能够有效利用有限的资源来提供尽可能大的吞吐量?一个有效的办法就是引入缓存,打破标准流程,每个环节中请求可以从缓存中直接获取…- 3.7k
- 0
-
JVM的内存分配、运行原理、回收算法机制
不管是BAT面试,还是工作实践中的JVM调优以及参数设置,或者内存溢出检测等,都需要涉及到Java虚拟机的内存模型、内存分配,以及回收算法机制等,这些都是必考、必会技能。 JVM内存模型 JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的。 1. 堆(Heap) 堆内存是所有线程共有的,可以分为两个部分:年轻代和老年代。下图中的…- 5.8k
- 0
-
NoSQL和SQL的区别,NoSQL的使用场景和选型比较
什么是NoSQL NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称,它具有非关系型、分布式、不提供ACID的数据库设计模式等特征。 NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。 SQL 和 …- 4.1k
- 0
-
负载均衡的原理、分类、实现架构,以及使用场景
为什么需要负载均衡 当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力。 从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和访问统一入口问题,为解决单点故障,我们可以采取冗余的方式…- 4.3k
- 0
-
双11秒杀系统如何设计?
秒杀活动场景 淘宝双11秒杀场景,大量的用户短时间内涌入,瞬间流量巨大(高并发),比如:1000万人同一时间抢购100件商品。秒杀活动是一个特别考验后台数据库、缓存服务的业务,对于数据库、缓存的性能要求特别严格。 秒杀背后的技术挑战 1、突增的服务器及网络需求 通常情况下,双 11 的服务器使用是平时的 3-5 倍,网络带宽是平时 N倍。 2、业务高并发,服务负载重 我们通常衡量一个 Web 系统…- 7k
- 0
-
数据库、JVM、缓存、SQL等性能调优方法和原则
编辑 性能优化基本是BAT等一线互联网公司程序员必备的技能,以下为大家完整揭晓性能完整的优化方案和方法:包含web网站调优、数据库、JVM调优、架构调优等方案。 第一:Web网站调优 1、尽可能减少HTTP请求:图片合并 (css sprites),Js脚本文件合并、css文件合并。 2、减少DNS查询 3、将css放在页面最上面,将js放在页面最下面 4、压缩js和css 减少文件体积,去除不必…- 4.2k
- 0
-
BAT Java面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!
JavaList面试题汇总 1、List集合:ArrayList、LinkedList、Vector等。 2、Vector是List接口下线程安全的集合。 3、List是有序的。 4、ArrayList和LinkedList数据结构不一样,前者用在查询较多的场合,后者适用于插入较多的场合。 5、ArrayList使用的是数组结构,LinkedList使用的是链表结构。 6、Jdk1.7之前Arra…- 7.1k
- 0
-
BAT Java面试完整汇总:面试准备(心态+简历)+面试题目+6条面试经验
今天分享的BAT面试完整内容主要包含: 面试前的心态准备(3点建议) 技术硬实力包含的范围(50题目) 个人简历突出和优化(3点优化步骤) 个人软实力的提升(6点提升维度) BAT面试经验总结(1点总结) 1. 面试前的心态准备 心态可以影响你面试的准备,笔试的状态,实力的发挥,可以影响一个面试过程的方方面面。心态崩了,就只剩运气了,offer估计也就走远了。 那怎么调整自己的心态呢? 首先是要正…- 4.1k
- 0
-
参加完阿里Java面试:一面+二面+三面+HR四面,后的复盘经验总结!
阿里中间件团队一面: 第一步先自我介绍? 介绍自己的项目经验和个人的擅长点,面试官主要考察你的表达能力和语言精简能力。 第二步:项目中做了什么,难点在哪里? 主要是想了解参与过技术难度最大的项目难点,技术难点在哪里,你是怎么来解决的,考察项目经验(技术难度)。 第三步:开始切入技术面试正题: Java的线程池说一下,各个参数的作用,如何进行的? 同步与异步区别? HashMap的实现原理,Hash…- 7.1k
- 0
-
设计模式详解
我们继续架构师进阶之独孤九剑进阶,目前我们仍然在第一阶段:程序设计和开发环节。 “ 设计模式不仅仅只是一种规范,更多的是一种设计思路和经验总结,目的只有一个:提高你高质量编码的能力。以下主要分为三个环节:为什么要用设计模式、设计模式的分类,以及最后推荐大家三本设计模式相关的书籍,希望对你有所帮助。 为什么要使用设计模式 1、设计模式是前人根据经验总结出来的,使用设计模式,就相当于是站在了前人的…- 4.5k
- 0
-
5步教你成功求职进入BAT
有读者朋友希望我能写一部分关于BAT内部的文章,比如,怎么进入BAT,BAT内部的项目的流程,有挑战性的项目实践,大概是怎么样的? 我希望用这篇文章开启整个进入BAT系列篇,让大家更好的了解BAT内部的实践项目过程和技术挑战。 是的,BAT项目实践,大写的重点! 如何写简历 一 什么是好的简历 简历是突出自我亮点的工作或学习经历和自我介绍。所以写简历要把握两个重点,工作经历要突出重点,自我介绍要写…- 3.1k
- 0