CAS

面试官问我:创建线程有几种方式?我笑了

心不动则不痛 提交于 2020-10-28 09:24:31
前言 多线程在面试中基本上已经是必问项了,面试官通常会从简单的问题开始发问,然后再一步一步的挖掘你的知识面。 比如,从线程是什么开始,线程和进程的区别,创建线程有几种方式,线程有几种状态,等等。 接下来自然就会引出线程池,Lock,Synchronized,JUC的各种并发包。然后就会引出 AQS、CAS、JMM、JVM等偏底层原理,一环扣一环。 这一节我们不聊其他的,只说创建线程有几种方式。 是不是感觉非常简单,不就是那个啥啥那几种么。 其实不然,只有我们给面试官解释清楚了,并加上我们自己的理解,才能在面试中加分。 正文 一般来说我们比较常用的有以下四种方式,下面先介绍它们的使用方法。然后,再说面试中怎样回答面试官的问题比较合适。 1、继承 Thread 类 通过继承 Thread 类,并重写它的 run 方法,我们就可以创建一个线程。 首先定义一个类来继承 Thread 类,重写 run 方法。 然后创建这个子类对象,并调用 start 方法启动线程。 2、实现 Runnable 接口 通过实现 Runnable ,并实现 run 方法,也可以创建一个线程。 首先定义一个类实现 Runnable 接口,并实现 run 方法。 然后创建 Runnable 实现类对象,并把它作为 target 传入 Thread 的构造函数中 最后调用 start 方法启动线程。 3、实现

Spring boot 整合

牧云@^-^@ 提交于 2020-10-27 00:54:36
Spring-cas-sso: Spring整合Jasig CAS框架实现单点登录 https://gitee.com/shenzhanwang/Spring-cas-sso Spring-activiti: Spring boot整合activiti工作流引擎实例 https://gitee.com/shenzhanwang/Spring-activiti SSM: Spring boot整合Mybatis实现增删改查 https://gitee.com/shenzhanwang/SSM 来源: oschina 链接: https://my.oschina.net/u/4259099/blog/4307265

绕过CAR-T“战场”,直接基因编辑B细胞治疗肿瘤、艾滋病?全球首家相关初创获众多资本青睐

与世无争的帅哥 提交于 2020-10-26 08:31:55
  CAR-T细胞疗法在血液瘤领域的“大展拳脚”,让工程T细胞成为免疫肿瘤学领域的重要研究对象。但现在,一家来自美国生物技术产业聚集地——剑桥市的初创公司Be Biopharma正在挖掘工程B细胞的治疗潜力。在Be Biopharma联合创始人、总裁兼董事埃里克斯·拉迪维奇·莫雷诺(Aleks Radovic-Moreno)博士看来, 工程B细胞将是细胞疗法的未来。    2020年10月22日,Be Biopharma宣布获得5200万美元A轮融资,该公司计划将利用这笔资金来挖掘工程B细胞治疗多种疾病的潜力。阿列克斯·拉迪维奇·莫雷诺(Aleks Radovic-Moreno)博士谈到B细胞的潜力时说:“我们的使命是开发一种具有广泛新药理学的新型细胞药物。我们认为, B细胞丰富的生物学特性决定了这将是一个巨大的新市场。”    图 | B细胞 (来源: The Scientist)    CRISPR基因编辑B细胞,待掘的“金矿”?   2017年被称为CAR-T细胞疗法的“元年”,诺华的Kymriah和Kite Pharma(吉利德科学旗下公司)的Tecartus相继上市,让CAR-T细胞疗法及工程T细胞成为科学界和医药界重点关注的方向。与此同时,另一种细胞疗法的研究也悄然“萌芽”,那就是针对B细胞的改造。   2017年12月

面试收获美团offer的学习笔记:MySQL+Spring+JVM+多线程并发等

痞子三分冷 提交于 2020-10-24 12:22:14
从去年到今年先后面试了 6 次美团,外卖、订单、商旅面试了好几个部门、总结下来面试的大体思路真的基本一致诶。比如: JVM 参数配置、常用调试工具、分区、类加载,还会问你有需要线上的调试问题吗?遇到死循环 CPU 飙升怎么解决? Java 并发包常用工具用法和原理、会配合集合类一起考,对了还会有 volatile、CAS 原理等。 MySQL 也算是必备了,索引存储结构、索引搜索原理、事务的隔离级别和原理,这些真的是逢考必问。当然除了 MySQL,Redis 和 ES 也是面试长文的,大多都是集中到原理。比如 ES 倒排索引、分片原理,Redis 的 zset 原理和使用场景、多路复用、穿透、熔断等等。 框架也是必备的知识点,最常见的就是 AOP 原理,自己怎么实现?Spring Boot 啥原理?框架通常会配合设计模式一起考,比如你最熟悉的设计模式是啥?Spring MVC 里面用了什么设计模式?解决了什么问题? 接下来最重要的就是服务治理了,这里面内容就太多了,Dubbo 也好,Spring Cloud 也罢,总之这个地方最能看得出你真实的工作经验和问题的考虑深度,毕竟没有真正在庞大的系统里面锻炼过真的很难应付这个地方。 没漏掉还有一个最重要的算法,这个就靠平时多练了,LeetCode 中文版上线了,一天一道题,面试必无敌。 说了这么多只有一个重点,就是无论大厂他有没有题库

AQS 原理剖析

本秂侑毒 提交于 2020-10-22 12:24:23
AQS 即 AbstractQueuedSynchronizer 类称作队列同步器,是构建其他同步器的一个重要的基础框架,同步器自身是没有实现任何同步接口。它是通过控制一个 int 类型的 state 变量来表示同步状态,使用一个内置的 FIFO (先进先出)队列来构建工作队列操作。 同步器定义有两种资源共享方式: Exclusive (独占式)和 Share (共享式)的获取同步状态。 独占式:一个时间点只能执行一个线程。 共享式:一个时间点可多个线程同时执行。 使用方式 同步器的设计采用模板模式,要实现一个同步组件得先继承 AbstractQueuedSynchronizer 类,通过调用同步器提供的方法和重写同步器的方法来实现。 调用同步器中的方法就是调用前面提到的通过 state 变量值的操作来表示同步操作, state 是被 volatile 修饰来保证线程可见性。 方法名 描述 getState() 获取当前线程同步状态值。 setState(int newState) 设置当前同步状态值。 compareAndSetState(int expect, int update) 通过 CAS 设置 state 的值。 为了避免被重写,以上方法都被 final 修饰了。 实现同步组件,需要自己根据自己定制化的需求进行处理,所以需要自己重写同步器提供的方法

【JAVA SE基础篇】62.多线程相关2

北城余情 提交于 2020-10-21 20:51:35
1.ThreadLocal(线程本地环境) 在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好。 因为局部变量只有线程自己能看见,不会影响其他线程。 ThreadLocal能够放一个线程级别的变量,其本身能够被多各线程共享使用,并且又能够达到线程安全的目的。 ThreadLocal就是想在多线程环境下去保证成员变量的安全。 常用方法:get/set/initialValue方法 JDK建议ThreadLocal定义为private static ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程所有的调用到的方法都可以非常方便的访问这些资源。 Hibernate的Seesion工具类HibernateUtil 通过不同的线程对象设置Bean属性,保证各个线程Bean对象的独立性 例: 2.可重入锁 锁作为并发共享数据保证一致性的工具,大多数内置锁都是可重入的,也就是说,如果某个线程试图获取一个已经由它自己持有的锁时, 那么这个请求会立刻成功,并且会将这个锁的计数值+1.而当线程退出同步代码块时,计数器将会递减,当计数器等于0时,锁释放。 如果没有可重入锁的支持,在第二次企图获得锁时会进入死锁状态。 例: 3.CAS 锁分为两类:   悲观锁:synchronized是独占锁即悲观锁

记一次订单号事故

余生长醉 提交于 2020-10-20 02:02:44
记一次订单号事故 去年年底的时候,我们线上出了一次事故,这个事故的表象是这样的: 系统出现了两个一模一样的订单号,订单的内容却不是不一样的,而且系统在按照 订单号查询的时候一直抛错,也没法正常回调,而且事情发生的不止一次,所以 这次系统升级一定要解决掉。 经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题, 所以趁着这次问题我好好的理了一下我同事写的代码。 这里简要展示下当时的代码: /** * OD单号生成 * 订单号生成规则:OD + yyMMddHHmmssSSS + 5位数(商户ID3位+随机数2位) 22位 */ public static String getYYMMDDHHNumber(String merchId){ StringBuffer orderNo = new StringBuffer(new SimpleDateFormat("yyMMddHHmmssSSS").format(new Date())); if(StringUtils.isNotBlank(merchId)){ if(merchId.length()>3){ orderNo.append(merchId.substring(0,3)); }else { orderNo.append(merchId); } } int orderLength = orderNo

浅谈乐观锁的设计

☆樱花仙子☆ 提交于 2020-10-19 13:07:18
前言 大家对 乐观锁 这三个字眼应该不陌生吧? 为什么今天我想谈谈乐观锁的设计呢? 关于数据库的乐观锁使用, 是不是很多人一看到乐观锁就会想到 Version 字段 (版本标识)。 ps: 其实不是非要新增版本字段 正文 乐观锁 , Optimistic Concurrency Control (乐观并发控制),简称 OCC 。 乐观锁不是一种真正的 ‘ 锁 ’,而是一种实现锁效果的 设计 思想 : 乐观地 认为 并发的操作对数据 不会产生冲突,所以没有使用 真正的 ‘锁’ 去对数据加锁; 而是选择在提交数据的时候,去 检测数据是否冲突 了? 发现冲突就采取 处理操作,例如报错、重试、停止等等。 设计 基于数据库使用展开介绍 使用版本标识 version 字段 也就是在 表内 增加一个字段 version 。 每次写操作如果时成功的,都需要 将 version 版本值 +1 , 例如原来 某条数据的 version值为 1, 如果修改了,那么 version就需要变成 version+ 1 , 也就是 2. 然而在并发场景,大量的写操作不免会发生冲突。 所以当我们 读取 数据, 需要做更新操作。 我们的 设计流程时这样的: 1. 读取数据,把数据里的version值 取出作为 更新前标识 值 version-before。 2.做业务逻辑计算等等 .... 3. 更新数据操作

Spring Security 竟然可以同时存在多个过滤器链?

余生长醉 提交于 2020-10-19 08:54:03
这是来自一个小伙伴的提问,我觉得很有必要和大家聊一聊这个问题: 首先这个问题本身是有点问题的,因为 http.authorizeRequests() 并非总是第一个,虽然大部分情况下,我们看到的是第一个,但是也有很多情况 http.authorizeRequests() 不是首先出现。要搞明白这个问题,我们就要搞清楚 http.authorizeRequests() 到底是啥意思! 这就涉及到 Spring Security 中过滤器链的配置问题了,本文松哥就来和大家稍微聊一聊。 本文是 Spring Security 系列第 36 篇,阅读前面文章有助于更好的理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密码怎么解密了 手把手教你定制 Spring Security 中的表单登录 Spring Security 做前后端分离,咱就别做页面跳转了!统统 JSON 交互 Spring Security 中的授权操作原来这么简单 Spring Security 如何将用户数据存入数据库? Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单! Spring Boot + Spring Security 实现自动登录功能 Spring Boot 自动登录,安全风险要怎么控制

告诉你一个 AtomicInteger 的惊天大秘密!

我的未来我决定 提交于 2020-10-18 10:49:16
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨cxuan 来源丨Java建设者 (ID:javajianshe) i++ 不是线程安全的操作,因为它不是一个原子性操作。 那么,如果我想要达到类似 i++ 的这种效果,我应该使用哪些集合或者说工具类呢? 在 JDK1.5 之前,为了确保在多线程下对某 基本 数据类型或者 引用 数据类型运算的原子性,必须依赖于外部关键字 synchronized ,但是这种情况在 JDK1.5 之后发生了改观,当然你依然可以使用 synchronized 来保证原子性,我们这里所说的一种线程安全的方式是原子性的工具类,比如 「AtomicInteger、AtomicBoolean」 等。这些原子类都是线程安全的工具类,他们同时也是 Lock-Free 的。下面我们就来一起认识一下这些工具类以及 Lock - Free 是个什么概念。 了解 AtomicInteger AtomicInteger 是 JDK1.5 新添加的工具类,我们首先来看一下它的继承关系 与 int 的包装类 Integer 一样,都是继承于 Number 类的。 这个 Number 类是基本数据类型的包装类,一般和数据类型有关的对象都会继承于 Number 类。