硬核难度

个人博客

Java多线程与高并发(六):高并发解决思路

本系列的最后一篇,主要提供一些高并发场景的解决思路,实现的细节虽然需要在实战中学习,但解决的思路一定要有。 扩容 垂直扩容(纵向扩展) 提高单个服务(服务器、数据库)自身能力 但会增大单个服务中其他软件设施的依赖与管理、服务内部复杂度 水平扩容(横向扩展) 增加更多服务成员 但会增加网络、数据库IO开销、管理多个服务器的难度 对数据库的扩容方案 确定业务类型 读操作多:采用垂直扩容方案(......

Java多线程与高并发(五):线程池

new Thread弊端 每次启动线程都需要new Thread新建对象与线程,性能差。线程池能重用存在的线程,减少对象创建、回收的开销。 线程缺乏统一管理,可以无限制的新建线程,导致OOM。线程池可以控制可以创建、执行的最大并发线程数。 缺少工程实践的一些高级的功能如定期执行、线程中断。线程池提供定期执行、并发数控制功能 ThreadPoolExecutor 核心变量 在创建线程池时......

Java多线程与高并发(四):java.util.concurrent包

面试官:你用过JUC的哪些工具类? 前面从基础开始,到线程安全的实现、对象的发布与共享,涉及到很多线程安全的类与工具,JDK1.5开始,提供了更加方便强大的线程同步管理工具包JUC让我们使用,这个也是面试与实践中的重点,本文结合源代码作一些比较落地的讲解。 报告面试官,JUC中有非常多的类,将部分类按功能进行分类,分别是: 之前提到过的原子atomic包 比synchronized功能......

Java多线程与高并发(三):对象的安全发布与共享策略

面试官:你知道如何发布或共享一个对象吗? 发布对象:使一个对象能够被其他线程、其他作用域的代码所使用。 变量逸出原有作用域 12345678910111213141516import java.util.Arrays;public class Main { private String[] strs = {"1", "2", "3"}; publi......

Java多线程与高并发(二):线程安全性

面试官:你能说说什么是线程安全吗? 线程安全性 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步,这个类都能表现出正确的行为,那么这个类就是线程安全的。 原子性:同一时刻只能有一个线程对它操作 可见性:一个线程对内存的修改能让其他线程观察到 有序性:指令执行顺序,杂乱无序 原子性 Atomic包 AtomicInte......

Java多线程与高并发(一):并发基础与模拟工具

面试官:你知道Java的内存模型是什么吗? 基本概念 并发、并行 引用知乎上一个最高赞: 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。 并发的关键是你有处理多个任务的能力,不一定要同时。......

敏捷中的看板

很荣幸,第一份工作就进入了提倡敏捷开发的TW,进的第一个团队也是比较规范使用看板方法的团队。什么敏捷开发、看板方法,在学校的时候是从来没听过的,甚至进公司前一年还在学校学习如何通过瀑布开发方式来完成项目,当时觉得瀑布过于死板,但是又想不到有什么好的方法。 #什么是敏捷开发 一种以用户的需求进化为核心、高效快速迭代的软件开发方式而已,只要符合了敏捷的元素,你就可以说用的是敏捷,敏捷开发没有固......

手把手教你搭建一个持续集成环境

本文将带领你从0开始,用Vagrant + Docker + Ansible + Jenkins + Nginx + GitHub等工具和资源来搭建一条可执行可扩展的持续集成流水线,即使这些名字你都没听过也没关系,本文将会在需要的时候一一解释给你听。 By: 巧颖 & 天一 #总览 这是我们将要搭建的所有基础设施的总体架构图,我们将在本文中手把手教你搭建这样一个持续集成环境。 我......

少年的2017年尾声

最后一天啦,发现一个半月没有更新博客了,一方面是项目上有点忙又赶上年终评价了,一方面是不知道写什么,还有一方面是痴迷于steam上的吃鸡不能自拔。不如把最近的状况写写吧。 #习惯性博客 写博客真是一件容易上瘾的事情。 但是如果从来没写过日记、博客的时候要你去写一篇长文可真是非常头疼了。记得在小学的时候,日记是语文老师布置下来的强制性的任务,每天都要写,第二天上交,不能少于多少字。写起来......

React Native组件设计实践

本文中所提到的组件的定义是基于React Native官方提供的某个/些组件进行包装/组合的用户某个特定App的自定义组件,可能与业务相关,也可能无关。 #为什么要写组件 想象一下,你的每一个页面中除了工具类的引用之外没有任何一个import,当你写了几个页面之后发现很舒服,当你写下一个页面的时候你突然发现你可能需要: 复制 + 粘贴 花很多时间弄清楚之前的页面中写的是什么东西 粘贴代码......