java
文章平均质量分 87
架构师修炼
WX公众号:架构师修炼, 专注分享一线互联网解决方案
展开
-
千万级高并发秒杀系统设计套路!超详细解读~~
秒杀”系统的流程并不复杂——只是一个“下单扣库存”的动作,但由于其独特的业务特点,所以在进行系统设计时不能大意。对于瞬时流量洪峰的高并发“秒杀”系统,我们需要什么技术呢?下面来总结一下。(1)数据的静态化的技术用来应对高并发读的请求,主要涉及以下内容,这些在《高并发系统实战派》一书中详细分享了真实使用场景已经技术方案:各层级缓存的处理(即多级缓存的技术)分布式缓存技术(2)负载均衡反向代理技术LVSNginx(3)异步处理技术消息队列技术排队系统技术(4)系统架构设计技术系统模块化划分。翻译 2022-10-25 09:20:09 · 653 阅读 · 0 评论 -
通关 MyBatis 实战(上篇)
MyBatis 介绍MyBatis 是一款优秀的 ORM(Object Relational Mapping,对象关系映射)框架,它可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中。它是 Apache 提供的一个开源项目,之前的名字叫做 iBatis,2010 年迁移到了 Google Code,并且将名字改为我们现在所熟知的 MyBatis,又于 2013 年 11 月迁移到了 Github。MyBatis 提供了普通 SQL 查询、事务、存储过程等功能,它的优缺点如下。优点:原创 2020-07-16 09:32:33 · 261 阅读 · 0 评论 -
Spring 核心知识讲解,太简单啦!
Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot,也是基于 Spring 实现的,SpringBoot 的诞生是为了让开发者更方便地使用 Spring,因此 Spring 在 Java 体系中的地位可谓首屈一指。当然,如果想要把 Spring 所有功能都讲的一清二楚,远远不是一两篇文章能够做到的,但幸运的是,Spring 的基础资料可以很轻易的搜索到,那么我们本讲主要的目的就是把 Sp原创 2020-06-20 14:21:10 · 328 阅读 · 0 评论 -
Java 并发包(JUC)中高级同步工具,太帅了
Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提供了各种功能支持,比如: 提供了线程池的创建类 ThreadPoolExecutor、Executors 等; 提供了各种锁,如 Lock、ReentrantLock 等; 提供了各种线程安全的数据结构,如 ConcurrentHashMap、LinkedBlockingQueue、DelayQueue 等; 提供了更加高级的线程同步结构,如原创 2020-06-13 10:11:47 · 506 阅读 · 0 评论 -
线程安全——synchronized 和 ReentrantLock ,看完后绝不后悔系列
前面我们介绍了很多关于多线程的内容,在多线程中有一个很重要的课题需要我们攻克,那就是线程安全问题。线程安全问题指的是在多线程中,各线程之间因为同时操作所产生的数据污染或其他非预期的程序运行结果。线程安全1)非线程安全事例比如 A 和 B 同时给 C 转账的问题,假设 C 原本余额有 100 元,A 给 C 转账 100 元,正在转的途中,此时 B 也给 C 转了 100 元,这个时候 A 先给 C 转账成功,余额变成了 200 元,但 B 事先查询 C 的余额是 100 元,转账成功之后也是 2原创 2020-05-30 09:19:44 · 446 阅读 · 0 评论 -
Threadlocal详解,很详细了
什么是 ThreadLocal?ThreadLocal 诞生于 JDK 1.2,用于解决多线程间的数据隔离问题。也就是说 ThreadLocal 会为每一个线程创建一个单独的变量副本。ThreadLocal 有什么用?ThreadLocal 最典型的使用场景有两个: ThreadLocal 可以用来管理 Session,因为每个人的信息都是不一样的,所以就很适合用 ThreadLocal 来管理; 数据库连接,为每一个线程分配一个独立的资源,也适合用 ThreadLocal 来实原创 2020-05-14 09:01:03 · 699 阅读 · 1 评论 -
线程池—Executors 详解
线程池的创建分为两种方式:ThreadPoolExecutor 和 Executors,上一节学习了 ThreadPoolExecutor 的使用方式,本节重点来看 Executors 是如何创建线程池的。Executors 可以创建以下六种线程池。 FixedThreadPool(n):创建一个数量固定的线程池,超出的任务会在队列中等待空闲的线程,可用于控制程序的最大并发数。 CachedThreadPool():短时间内处理大量工作的线程池,会根据任务数量产生对应的线程,并试图缓存线程原创 2020-05-11 17:31:52 · 1032 阅读 · 0 评论 -
java 线程池看这一篇就行了
线程池介绍线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销。为什么要使用线程池? 可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。 避免创建大量同类线程所导致的资源过度竞争和内存溢出的问题。 支持更多功能,比如延迟任务线程池(newScheduledThreadPool)和缓...原创 2020-04-27 09:08:09 · 205 阅读 · 0 评论 -
java线程与死锁问题,讲的太详细太好懂了,再也不用怕了
线程介绍线程(Thread)是程序运行的执行单元,依托于进程存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,因而也被称为轻量级的进程。什么是进程进程(Processes)是程序的一次动态执行,是系统进行资源分配和调度的基本单位,是操作系统运行的基础,通常每一个进程都拥有自己独立的内存空间和系统资源。简单来说,进程可...原创 2020-04-24 08:46:25 · 252 阅读 · 0 评论 -
Java 反射和动态代理真的没那么高深,一起来看看就知道了
反射反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力。简单来说就是通过反射,可以在运行期间获取、检测和调用对象的属性和方法。反射的使用场景在现实中反射的使用场景有很多,比如以下几个。使用场景一:编程工具 IDEA 或 Eclipse 等,在写代码时会有代码(属性或方法名)提示,就是因为使用了反射。使用场景二:很多知名的框架,为了让...原创 2020-04-20 08:52:32 · 210 阅读 · 0 评论 -
Java IO 以及 NIO 详解
上一篇:Java 队列详解IO 介绍IO 是 Input/Output 的缩写,它是基于流模型实现的,比如操作文件时使用输入流和输出流来写入和读取文件等。IO 分类传统的 IO,按照流类型我们可以分为: 字符流 字节流 其中,字符流包括 Reader、Writer;字节流包括 InputStream、OutputStream。传统 IO 的类关系图,如下图所示...原创 2020-04-07 17:54:02 · 492 阅读 · 0 评论 -
java 教程--如果你是这样学习 java 的肯定能成为大神
1、百万年薪架构师实战视频 关键词“年薪”2、基于MyCat的MySQL高可用读写分离集群关键词“mycat”3、RabbitMQ消息中间件技术精讲 关键词“rabbitmq”4、Java读源码之Netty深入剖析 关键词“netty”5、docker前后端分离项目 关键词“docker分离”6...原创 2019-12-25 15:02:18 · 809 阅读 · 0 评论 -
java反射和动态代理详细代码解析,面试也不再害怕
什么是反射反射就是在程序运行的过程中,我们能知道任何一个类有哪些方法和属性,并且能对它的方法和属性进行调用,我们就把这种能动态获取对象信息和调用对象方法的功能称之为反射。反射都用于哪些场景有些朋友在平时开发中可能并没有去写Java反射的业务,下面我们来看看反射的几种常用的场景:1,用于代码编辑工具中,如Eclipse或者idea,我们在代码编写的时候,是不是经常自动的给我们各...原创 2019-12-06 16:39:00 · 701 阅读 · 1 评论 -
一致性哈希算法,在分布式开发中你必须会写,来看完整代码
今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很长,有担心有些朋友还没接触过一致性哈希算法,所以,我就将它单独拎出来讲一下。什么是一致性哈希一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,在移除或者添加一个服务器时...原创 2019-12-04 10:13:21 · 1006 阅读 · 0 评论 -
NoSql数据库,是怎么解决我们高并发场景下MySql表现的不足
通过前面几天的学习,我们在面对高并发流量时,为了应对大量读写请求,特此将我们的普通存储系统开发成了一套分布式存储系统。主要基于读写分离主从复制以及数据分库分表实现的。不清楚的可以再回去看看啊数据库读写分离方案,实现高性能数据库集群,数据库分库分表后,我们生产环境怎么实现不停机数据迁移后来又有朋友问我,如果他们的业务还在继续增长,都成国内独角兽的行业了,之前动态分的1024个库表每个表都达到了亿...原创 2019-12-02 10:01:50 · 3977 阅读 · 0 评论 -
LRU缓存淘汰算法真实实现方案
我们在平时项目开发中是不是会遇到这样的场景,每次访问的时候需要去取内存里的数据,没取到就添加到内存,但是,又不想取到的内存是过于陈旧的。那这块我们该怎么去设计算法,从而很合理的去管理我们内存的数据呢?今天,给大家分享一个在我们开发中比较常用的缓存淘汰算法 LRU,LRU是指最近最少使用策略来管理内存数据。根据数据的历史访问记录来进行淘汰缓存,即假如数据最近被访问过,那么它以后被访问到的几率会更...原创 2019-11-26 17:15:32 · 1128 阅读 · 0 评论 -
注解实现对象的属性赋值
在做一些业务时,从前台获取的数据用实体接收后,可能需要有字段转换才能存储到库中,或从库中查找的数据,会做一些转换或处理再返回给前台视图view。有一个简单的BeanUtils.copyProperties(source, target, ignoreProperties);可实现两个对象之间属性的转换,但此种方式仅仅支持完全相同字段名和字段类型的字段赋值;另外有第三方工具dozer,使用doze...转载 2019-11-22 11:57:17 · 2417 阅读 · 0 评论 -
java类加载机制,再也不怕面试官的刁难
上一篇我们详细的讲解了java 虚拟机的内存模型(要想精通java,你必须得知道java的内存模型,不忽悠),并且知道了我们写的代码分别是怎么存在JVM的哪个内存区域中。今天我们来看另一个重要的问题,类加载机制的核心知识,这个知识也是面试经常问到的。我们的java代码是怎么运行起来的?我们在写好java代码之后,都是先进行打包,打成jar包或者war包,最后丢到服务器上启动JVM进程就能运...原创 2019-11-22 10:37:01 · 2150 阅读 · 0 评论 -
为什么你每次被问到HashMap底层原理都一知半解,这次彻底搞定它
我相信,HashMap这个容器,在我们Java程序开发中是经常出现在我们的代码中的,主要用来存储键值对的数据。它是应用更加广泛的哈希表实现。而且,我们经常在面试中,经常被问到hashMap的底层实现,怎么存放数据的,怎么过去数据的,它的加载因子LoadFactor为什么是0.75等等问题。如果,我们在平时没有很好的了解或者是没有看过其源码的话,对于这些问题,一般就会出现不知道怎么去回答或者回答...原创 2019-11-21 12:26:49 · 1530 阅读 · 0 评论