java
Formor_
这个作者很懒,什么都没留下…
展开
-
怎么更好的去使用Mysql
高可用性就是保证尽量少的宕机时间。尽量少的数据损坏。一般会受到如下因素影响:~环境因素, 比如磁盘耗尽~性能问题, 可能是运行了超级慢的sql~糟糕的schema和索引设计~复制导致数据不一致。提升平均失效时间 (MTBF)就是连续运行的时间。 我们可以通过如下的注意点尽量避免:~测试回复工具和流程~最小权限~用好的命名和组织约定避免混乱,比如测试开发库分离~升级服务器前使...原创 2019-07-23 17:26:26 · 232 阅读 · 0 评论 -
MySQL 查询优化如何坐到极致?
什么影响了数据库查询速度1.1 影响数据库查询速度的四个因素1.2 风险分析QPS:QueriesPerSecond意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。客户机在发送请求时开始计时,收到服务器响应后结...原创 2019-08-13 16:55:04 · 214 阅读 · 0 评论 -
java线程池——逐步分析
什么是线程池很简单,简单看名字就知道是装有线程的池子,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程的复用。线程池的优点.我们知道不用线程池的话,每个线程都要通过new Thread(xxRunnable).start()的方式来创建并运行一个线程,线程少的话这不会是问题,而真实环境可能会开启多个线程让系统和程序达到最佳效率,当线程数达到...原创 2019-08-13 21:41:01 · 186 阅读 · 0 评论 -
一文读大厂微服务水平
微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,每种应用程序都在其自己的进程中运行。它们之间通过轻量级机制(通常是HTTP资源的API)进行通信(也可以采用消...原创 2019-08-20 12:58:36 · 354 阅读 · 0 评论 -
多线程经典面试题
什么是线程池? 有哪几种创建方式?线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。java 提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池。四种线程池的创...原创 2019-08-14 20:48:38 · 606 阅读 · 0 评论 -
实战分布式之电商高并发秒杀
何为“秒杀”及其特点“秒杀”这一业务场景在如今已经不是什么新鲜名词,它本质上属于短时突发性高并发访问问题,业务特点如下:定时触发,流量在瞬间突增秒杀请求中常常只有部分能够成功秒杀商品数量往往有限,不能超卖,但能接受少卖不要求立即返回真实下单结果分析一下这些秒杀场景的典型特点,我们不难看出,秒杀场景属于典型的高并发场景,对系统的冲击较大。我们来对上述特点进行逐一分析:1.定时触发,...原创 2019-08-14 22:31:45 · 1604 阅读 · 0 评论 -
闲赋在家的猿们、接下来怎么走?
说来惭愧,不怕大家笑话。做开发5年多,到目前还是一名不折不扣的扫地僧。年前的辞职后便一直在家静养中。其实也没什么,就是想趁着这段时间闲赋在家认真的总结一下自己这些年来在外工作与面试等,做一个简单的总结与反思。年龄越来越大了,做一下自己后面一个人生规划。不过在家每天也是在撸码,还有就是复习与学习现在的架构知识点,学习使人进步嘛!不是么?毕竟技术还是不能落下。前些天在我群里认识了以为挺有意思的老兄...原创 2019-08-21 14:47:31 · 787 阅读 · 0 评论 -
入行这么久? 真正理解了缓存吗
今天跟大家分享的缓存是指软件层面的缓存。大家都知道的一点是,缓存可以让原本打开很慢的页面,变得能“秒开”。你平时访问的 APP 与网站几乎都有涉及到缓存的运用。那么,缓存除了能加速数据的访问之外,还有什么作用呢?另外,任何事物都有两面性,我们如何才能将缓存的优点发挥得淋淋尽致,同时避免掉到它的弊端中呢?缓存能做什么?正如前面所说,大家最普遍的理解就是当我们遇到某个页面打开很慢的时候,会想到...原创 2019-08-12 19:41:23 · 360 阅读 · 0 评论 -
Redis之实现持久化与恢复
一、前言本文主要讲了 Redis 的持久化相关功能,持久化一直是影响 Redis 性能的高发地,也是面试中经常被问到的。包括 RDB 相关的特定和优缺点,AOF 的优缺点,事实上,由于 RDB 的数据实时性问题,目前用 AOF 比较多了,而持久化恢复也是优先 AOF。RDB 是旧的模式,现在基本上都使用 AOF。二、AOF由于 RDB 的数据实时性问题,AOF(append only f...原创 2019-08-12 20:14:48 · 215 阅读 · 0 评论 -
备战金九银十 你必须知道的Mybatis面试题
1. #{}和${}的区别是什么?#{}是预编译处理,${}是字符串替换。Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值;Mybatis 在处理时,就是把{}替换成变量的值。使用#{}可以有效的防止 SQL 注入,提高系统安全性。2. Mybatis 是如何进行分页的?分页插件的原理是什么?Mybat...原创 2019-08-16 16:10:19 · 183 阅读 · 0 评论 -
Spring Cloud如何可用于微服务架构
简介微服务的发展史微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成,NetFlix有大约600个服务。国内方面,阿里巴巴、腾讯、360、京东、58同城等很多互联网公司都进行了微服务化实践。当前微服务的开发框架也非常多...原创 2019-08-27 13:57:01 · 196 阅读 · 0 评论 -
redis持久化底层原理-RDB与AOF
什么是Redis持久化?Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示:这样做有什么问题呢?其实,只要稍微有点计算机基础知识的人都知道,存储在内存当中的数据,只要服务器关机(各种原因引起的),内存中的数据就会消失了,不仅服务器关机会造成数据消失,Redis服务器守护进程退出,内存中的数据也一样会消失。对于只...原创 2019-08-29 15:34:17 · 417 阅读 · 0 评论 -
怎么理解java关键字volatile(附最新阿里面题)
一、什么是volatilevolatile作为java中的关键词之一,用以声明变量的值可能随时会别的线程修改,使用volatile修饰的变量会强制将修改的值立即写入主存,主存中值的更新会使缓存中的值失效(非volatile变量不具备这样的特性,非volatile变量的值会被缓存,线程A更新了这个值,线程B读取这个变量的值时可能读到的并不是是线程A更新后的值)。volatile会禁止指令重排。二...原创 2019-09-03 20:43:02 · 366 阅读 · 0 评论 -
高级java人员都用过的17个jvm参数
前言大家都知道,jvm在启动的时候,会执行默认的一些参数。一般情况下,这些设置的默认参数应对一些平常的项目也够用了。但是如果项目特别大了,需要增加一下堆内存的大小、或者是系统老是莫明的挂掉,想查看下gc日志来排查一下错误的原因,都需要咱们手动设置这些参数。各个参数介绍1.verbose:gc表示,启动jvm的时候,输出jvm里面的gc信息。格式如下:[Full GC 178K->...原创 2019-09-27 20:05:31 · 430 阅读 · 0 评论 -
这样是不是就能把系统设计好??
一、善用UML工具用例图用于需求分析阶段,从用户角度描述系统功能。静态图:类图、对象图、包图交互图-时序图(注重时间)常用组合片段:选项(Opt)、循环(Loop)、并行(Par)、抉择(Alt)、中断(Break)交互图-协作图(注重对象)行为图-状态图(注重状态)行为图-活动图(注重活动)实现图-组件图实现图-部署图二、遵从设计原则设计模式基础单一职...原创 2019-08-13 13:52:48 · 212 阅读 · 0 评论 -
谈谈JVM-深堆、浅堆
浅堆表示一个对象结构所占用的大小(对象头+实例数据+对齐填充,不包括内部引用 对象大小)深堆表示一个对象被 GC 回收后,可以真实释放的内存大小(保留空间)对象对象 = 对象头 + 实例数据 + 对齐填充对象头对象头 = 标记部分 + 原始对象引用标记部分包括 hashcode、gc 分代年龄、锁状态标志、线程持有锁、偏向线程锁id,偏向时间戳,这一部分在32位机器上为 4 byte,...原创 2019-08-08 17:34:40 · 717 阅读 · 1 评论 -
这才是字节跳动(今日头条)面试?
6月份朋友分享的头条字节跳动面试经验,时间均控制在1个小时。1.1 第一面:第一面主要考察基础,先简单自我介绍,以及介绍一下项目,然后开始考察基础。1.1.1 TCP相关基础知识问题1: 请详细描述三次握手和四次挥手的过程要求熟悉三次握手和四次挥手的机制,要求画出状态图。问题2: 四次挥手中TIME_WAIT状态存在的目的是什么?这个问题是画出四次挥手状态图,会引申问你。不排除还会问...原创 2019-07-23 18:24:36 · 19971 阅读 · 2 评论 -
详解Redis入门(面试)姿势
尝试整理了一下redis复习思路,不足之处请多多包涵。 因为考虑到绝大部分写业务的程序员,在实际开发中使用redis的时候,只会setvalue和getvalue两个操作,对redis整体缺乏一个认知。所以对redis常见问题做一个总结,希望能对大家有帮助。1、为什么使用redis(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样...原创 2019-07-23 21:12:14 · 297 阅读 · 0 评论 -
微服务入门 雪崩 降级与熔断
一服务雪崩假设存在此调用链此时,Service A的流量波动很大,流量经常会突然性增加!那么在这种情况下,就算Service A能扛得住请求,Service B和Service C未必能扛得住这突发的请求。此时,如果Service C因为抗不住请求,变得不可用。那么Service B的请求也会阻塞,慢慢耗尽Service B的线程资源,Service B就会变得不可用。紧接着,Servic...原创 2019-07-24 16:18:06 · 1652 阅读 · 0 评论 -
Java线程面试及答案--面试必看
这是博主精心准备的各厂线程面试都可能涉及的问题及答案,接下来让我们一起看看都是些什么问题吧。1.简述线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程。生命周期的五种状态新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)例如:Thread t1=new Thread();就绪(runnable)线程已经被启动,正在...原创 2019-07-29 16:27:04 · 369 阅读 · 0 评论 -
java虚拟机-正解姿势
一、什么是JVMJVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是平台无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Ja...原创 2019-08-02 21:46:17 · 229 阅读 · 0 评论 -
网易云音乐19年网络重大布局------消息队列改造之路
网易云音乐自2013年上线后,业务保持了高速增长。云音乐除了提供好听的音乐外,还留下了我们在乐和人上的美好回忆。通过该文你将了解到:网易云音乐消息队列改造背景网易云音乐业务对消息队列要求网易云音乐消息队列架构设计网易云音乐消息队列部分高级特性介绍网易云音乐消息队列落地使用情况网易云音乐消息队列未公开规划背景网易云音乐从13年4月上线以来,业务和用户突飞猛进。 后台技术也从传统的 T...原创 2019-07-26 13:41:46 · 440 阅读 · 0 评论 -
项目演练-熔断器Hystrix
为什么使用熔断器(Hystrix)?在微服务的体系下,服务之间是与依赖关系的!服务的调用中也存在着各种可能的问题,如果一个服务处理缓慢,可能会导致服务被阻塞住,导致整个系统被拖慢,甚至是崩溃。这种情况下可以使用熔断的机制,让服务降级,不让问题继续蔓延。SpringCloud 中的 Hystrix 组件就可以解决此类问题,Hystrix 负责监控服务之间的调用情况,连续多次失败的情况进行熔断保护...原创 2019-07-31 15:58:20 · 320 阅读 · 0 评论 -
Mybatis大厂面试常见问题
**1. #{}和KaTeX parse error: Expected 'EOF', got '#' at position 13: {}的区别是什么?**#̲{}是预编译处理,{}是字符串替换。Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement的 set 方法来赋值;Mybatis 在处理时,就是把{}替换成变量的值。使用#{...原创 2019-07-26 16:06:21 · 576 阅读 · 0 评论 -
蚂蚁金服19年面经--来自拿到offer的JAVA大佬分享
来博主朋友圈里7月份刚刚拿到蚂蚁金服offer的Java大佬分享给博主的面经!蚂蚁金服一面:1、分布式架构 50分钟2、个人介绍加项目介绍20分钟3、微服务架构是什么,它的优缺点?4、ACID CAP BASE理论5、分布式一致性协议,二段、三段、TCC,优缺点6、RPC过程7、服务注册中心宕机了怎么办?8、微服务还有其他什么组件9、分布式架构与微服务的关系10、你有什么问...原创 2019-07-26 20:01:08 · 618 阅读 · 0 评论 -
为什么要使用ORM框架
在java程序里用大量的aql语句代替了orm,在数据库由mysql改为oracle时,这些sql语句会由于语法原因大量报错,怎么办?欢迎讨论! 但是如果我们使用orm框架就只要需要更改一下方言,代码都不用改!!1.什么是ORM对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境...原创 2019-07-23 15:10:59 · 2114 阅读 · 0 评论 -
程序猿面试十家,只斩获两家
在这里给大家分享一位程序员面试的经历,希望小伙伴们喜欢!2018年3月刚入职一家公司,2019年3月又跳了出来。其实这家公司并没有亏待过我,只是每家公司都有自己的企业文化,而我不能接受此公司企业文化,离开是我考虑过之后最好的决定。既然离职了肯定就需要找工作,这里我与大家分享下个人找工作的经历(这里不会透露每家公司的面试题,也尽量不透露公司信息)。第一天出来找工作,共有三家面试:百度 XX...原创 2019-08-05 15:18:57 · 258 阅读 · 0 评论 -
线程池-打开方式
为什么不推荐使用Executors底层确实是通过LinkedBlockingQueue实现的,默认不设置队列大小的话,将是一个无边界的阻塞队列,最大长度为Integer.MAX_VALUE,而创建这么多线程,必然就有可能导致OOM,报错如下:Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exce...原创 2019-08-05 16:52:17 · 219 阅读 · 0 评论 -
Redis对象的底层实现及数据结构字符串
Redis是一种key/value型数据库,其中,每个key和value都是使用对象表示的。每次当我们在redis的数据库中新创建一个键值对时,我们至少会创建两个对象,一个对象用作键值对的键(键对象),另一个对象用作键值对的值(值对象)。redis的每种对象都由对象结构(redisObject)与对应编码的数据结构组合而成,redis支持5种对象类型。每种对象类型至少对应两种编码方式,不同的编...原创 2019-08-01 21:55:35 · 194 阅读 · 0 评论 -
Mysql索引结构全维度比较
前言在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。一、二叉查找树(BST):不平衡二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节...原创 2019-09-27 20:59:55 · 714 阅读 · 0 评论