0 qianlia

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2w+

5 个刁钻的 String 面试题!你都遇到过哪些?

1.判定定义为String类型的st1和st2是否相等,为什么package string;public class Demo2_String { public static void main(String[] args) { String st1 = "abc"; String st2 = "abc"; System.out.println(st1 == st2); System.out.println(st1.equals(st2)); }}输出

2020-06-30 10:03:50

老生常谈的GC垃圾回收,让我来“重新定义”,不信你还不明白

我们知道 JVM 调优主要调的是垃圾收集器的选择和参数的设置,所以我们对垃圾回收的知识必须要掌握了解,不然怎么调优呢,那么什么是垃圾呢,我们类比生活中的垃圾,就是不要的东西,需要清除的东西,那么第一步就是要找到垃圾,在Java中我们有两种方式。怎么定义垃圾1、引用计数法给对象中添加一个引用计数器,每当有一个地方引用他时,计数器值就+1。当引用失效时,计数器值就-1。任何时刻计数器为 0 的对象就是不可能在被使用,判断为不可达,等待 gc 清理。这个方法几乎报废,因为如果AB相互持有引用,导致永远不能被

2020-06-30 09:32:24

什么是线程死锁?形成条件是什么?如何避免?

什么是线程死锁死锁是指两个或两个以上的进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。线程死锁下面

2020-06-29 11:39:48

MySQL 中你必须要懂的 MVCC

前言MySQL 是目前流行的开源数据库之一,各大公司都使用 MySQL 作为自家的关系型数据库,但是 MySQL 作为一个数据库而言,基本使用是非常简单的,只要会一点点建表语句(可以使用工具建表),一点点查询语句就可以使用 MySQL 来存储数据了。这种没有灵魂的操作,对于很多初学者来说也许已经是家常便饭了。但是对于一些已经有开发经验的人来说,这是远远不够的。你必须要学习很多数据库相关的知识,而这一篇就是彻底来剖析 MySQL 中的 MVCC 是如何实现的。看完这篇文章,你就可以知道各种隔离级别之下,

2020-06-29 10:58:14

一份来自蚂蚁金服大佬的数据库设计总结(纯干货)

一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,再好的老师也比不过经验的教诲。所以我归纳历年来所走的弯路及体会,并在网上找了些对数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。精选了其中的

2020-06-28 16:02:52

MySQL 21道高频面试题及其解析

Q1:MySQL主要有哪些存储引擎,分别适合哪些应用场景?答:主要有①MyISAM,是5.5版本之前的默认存储引擎,支持表级锁,不支持事务和外键,并发效率较低,读取数据快,更新数据慢。适合以读操作为主,并且对并发性要求较低的应用。②InnoDB,MySQL目前的默认存储引擎,支持行级锁、事务和外键,并发效率好。适合对事务的完整性和并发性、数据的准确性要求比较高,增删操作多的应用。③Memory,所有的数据都保存在内存中,访问速度快,一旦服务关闭数据将丢失。适合更新不太频繁的数据量小的表用来快速得到访问

2020-06-28 14:33:46

汉字转UTF-8过程,你知道吗?

什么是UTF-8编码UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。如表:1字节: 0xxxxxxx2字节:110xxxxx 10xxxxxx3字节:1110xxxx 10xxxxxx 10xxxxxx4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx5字节:111110

2020-06-27 15:42:56

被说烂了的Java垃圾回收算法,我带来了最“清新脱俗”的详细图解

一、概况理解Java虚拟机垃圾回收机制的底层原理,是系统调优与线上问题排查的基础,也是一个高级Java程序员的基本功,本文就针对Java垃圾回收这一主题做一些整理与记录。Java垃圾回收器的种类繁多,它们的设计要在吞吐量(内存空间)与实时性(用户线程中断)方面进行权衡,各个垃圾回收器的适应场景也不尽相同(如:桌面应用,web应用),因此,这里我们只讨论JDK8下的默认垃圾回收器,毕竟目前JDK8版本是业界的主流(占80%),并且我们只讨论堆内存空间的垃圾回收。JDK8下的默认垃圾回收器:UsePara

2020-06-27 14:09:15

来吧,用设计模式来干掉 if-else

物流行业中,通常会涉及到EDI报文(XML格式文件)传输和回执接收,每发送一份EDI报文,后续都会收到与之关联的回执(标识该数据在第三方系统中的流转状态)。这里枚举几种回执类型:MT1101、MT2101、MT4101、MT8104、MT8105、MT9999,系统在收到不同的回执报文后,会执行对应的业务逻辑处理。当然,实际业务场景并没有那么笼统,这里以回执处理为演示案例。模拟一个回执类@Datapublic class Receipt { /** * 回执信息 */

2020-06-22 11:49:06

面试时写不出排序算法?这篇总结的超级详细!

本文主要详细讲述常见的八种排序算法的思想、实现以及复杂度。包括冒泡排序、快速排序、插入排序、希尔排序等等,文章讲解非常详细!冒泡排序1、要点冒泡排序是一种交换排序。什么是交换排序呢?交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。2、算法思想它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢 “

2020-06-22 11:26:38

非常全面的支付宝钱包系统架构图解

支付宝是属于第三方支付平台,是阿里巴巴旗下的支付平台系统,支付宝也是中国支付行业的一个标兵,无论是业务能力还是产品创都引领者中国支付行业的前沿,作为支付业务的基础系统的复杂性和稳定性是支付业务是否能够及时快速安全处理的根本。本期支付圈收集了支付宝的系统架构图,包含:清算、客服、处理、资金、财务、等等。那么本文主要介绍Android支付宝钱包系统内部架构剖析。支付宝系统架构概况典型处理默认资金处理平台财务会计支付清算核算中心交易柔性事务消息系统数据分布数据

2020-06-20 13:56:57

Spring框架:深入理解 IOC

IoC是什么Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了,那我们来深入分析一下:1、谁控制谁,控制什么传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对

2020-06-20 11:46:51

学习Java代理模式,这一篇够用了

这篇代理模式的讲解,会通过其概念、特点,最后通过编码实现每个代理模式的使用场景。什么是代理模式代理模式是Java语言中一种编程的设计模式。包括两个重要角色:委托类和代理类。代理类可以在调用委托类同时,对委托类的现有功能的基础之上进行扩展。如何理解这个模式呢?用日常生活中常见的事情通俗的表述就是:房东把自己需要被出租的房子,交给房产中介,让其帮忙打理后续包括带租客看房、签合同等繁杂流程,房东只需最后通过房子获取利益就行。这个例子中,房东就是委托类,房产中介就是代理类。在Java开发中,代理分为静态代

2020-06-19 15:24:22

一文讲透Spring Boot中的事务是如何实现的

概述一直在用SpringBoot中的@Transactional来做事务管理,但是很少没想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事务的,最后我们结合源码的理解,自己动手写一个类似的注解来实现事务管理,帮助我们加深理解。阅读说明:本文假设你具备Java基础,同时对事务有基本的了解和使用。事务的相关知识开始看源码之前,我们先回顾下事务的相关知识。1、事务的隔离级别事务为什么需要隔离级别呢?这是因为在并发事务情况下,如果没有隔离级别会导致

2020-06-19 14:43:00

干货:负载均衡&CDN技术

曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文件的实现,甚至于某个循环内的运算如果出现不严谨都可能导致全盘崩溃。上面提到web性能优化需要多个角度去考虑,我们无法考虑到所有的优化细节,但可以从我们已知的层面去优化,我们就先从网络层面说起。网络请求路径:客户端输入URL定位符→DNS服务器寻找映射→进入服务器,处理数据→返回数据至客户端在这个用例中我

2020-06-18 13:29:44

这几种常见的“分布式锁”写法,搞懂再也不怕面试官,安排

什么是分布式锁?今天跟大家聊一聊分布式锁。首先说下什么是分布式锁,当我们在进行下订单减库存,抢票,选课,抢红包这些业务场景时,如果在此处没有锁的控制,会导致很严重的问题。学过多线程的小伙们知道,为了防止多个线程同时执行同一段代码,我们可以用 synchronized 关键字或 JUC 里面的 ReentrantLock 类来控制,但是目前几乎任何一个系统都是部署多台机器的,单机部署的应用很少,synchronized 和 ReentrantLock 发挥不出任何作用,此时就需要一把全局的锁,来代替 J

2020-06-18 11:37:40

只知道HDFS和GFS?你其实并不懂分布式文件系统

一、概述分布式文件系统是分布式领域的一个基础应用,其中最著名的毫无疑问是 HDFS/GFS 。如今该领域已经趋向于成熟,但了解它的设计要点和思想,对我们将来面临类似场景/问题时,具有借鉴意义。并且,分布式文件系统并非只有 HDFS/GFS 这一种形态,在它之外,还有其他形态各异、各有千秋的产品形态,对它们的了解,也对扩展我们的视野有所俾益。本文试图分析和思考,在分布式文件系统领域,我们要解决哪些问题、有些什么样的方案、以及各自的选择依据。二、过去的样子在几十年以前,分布式文件系统就已经出现了,以

2020-06-17 16:23:41

看完吊打面试官:Stream API有哪些中间操作?

Stream的中间操作多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值” 。 Stream的中间操作是不会有任何结果数据输出的。Stream的中间操作在整体上可以分为:筛选与切片、映射、排序。接下来,我们就分别对这些中间操作进行简要的说明。筛选与切片这里,我将与筛选和切片有关的操作整理成如下表格。接下来,我们列举几个简单的示例,以便加深理解。为了更好的测试程序,我先构造了一个对象数组,如下所示:pr

2020-06-17 13:53:36

Redis高级操作:scan实现模糊查询

简介在巨大的数据量的情况下,做查找符合某种规则的Key的信息,这里就有两种方式:keys命令:简单粗暴,但是由于Redis是单线程,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。can命令:以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强。scan相关命令都是用于增量迭代集合元素。SCAN 命令用于迭代当前数据库中的数据库键。SSCAN 命令用于迭代集合

2020-06-16 14:05:21

常见的缓存模式以及缓存的数据一致性

作者 | stephanie tang链接 | https://stephanietang.github.io/2020/04/13/cache-pattern/缓存由于其高性能,支持高并发的特性,在高并发的项目中不可或缺。被大家广泛使用的有Redis,Memcached等。本文主要探讨几种常见的缓存的读写模式,以及如何来保证缓存和数据库的数据一致性。Cache-AsideCache-Aside可能是项目中最常见的一种模式。它是一种控制逻辑都实现在应用程序中的模式。缓存不和数据库直接进行交互,.

2020-06-16 11:39:51

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。