数据库怎么分库分表? 数据库瓶颈 不管是IO瓶颈还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务service来看, 就是可用数据库连接少甚至无连接可用,接下来就可以想象了
线程池详解 https://blog.csdn.net/weixin_41563161/article/details/104889470 https://blog.csdn.net/weixin_41563
索引 1 前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结。自上上篇写了手动搭建Redis集群和MySQL主从同步(非Docker)和上篇写了动手实现MySQL读写分
ConcurrentHashMap 线程安全的具体实现方式 ConcurrentHashMap 是 Java 并发包中提供的一个线程安全且高效的 HashMap 实现,以弥补 HashMap 不适合在并发环境中操作使用的不足,本文就来分析下 ConcurrentHash
深度优先搜索广度优先搜索 1. 什么是 “搜索” 算法 我们知道,算法都是作用于某种具体的数据结构上的,而深度优先搜索算法和广度优先搜索算法就是作用于图这种数据结构的。 图上的搜索算法,就是从图中的一个顶点出发,到另一个
递归面试题目总结 【摘要】 递归具有很多的优点,它可以将一个大的问题划分为小的子问题,然后再逐步细分,达到解决问题的目的。递归的实现借用了栈桢的建立和销毁,所以它是很方便的。但是递归也有一些缺点,比如说,如果递归调用太深,
开放寻址法VS链表法 开放寻址法 只用数组一种数据结构存储,继承了数组的优点,对CPU缓冲友好,易于序列化。但是对内存的利⽤率并不如链表法,且冲突的代价更高。当数据量⽐较⼩、装载因⼦⼩的时候,适合采⽤开放寻址法。这也是Java
硬盘的读写原理 (一)硬盘概念以及组成 硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。 这个就是一个硬盘:大部分的硬盘是由磁头臂组支架,转轴,读写头,磁头臂,磁道,扇区,柱面,盘面组成的。
有序的数组中找到某一目标值首次出现的下标 给定一个升序的数组,这个数组中可能含有相同的元素,并且给定一个目标值。要求找出目标值在数组中首次出现的下标。 思想:题目给出有序数组,应该想到利用二分查找来做。找到左邻居,使其值加一。利用二分查找,算法复杂度为O(logn)
索引的坏处 1 建立的不对就有问题 就比如普通索引和唯一索引 change buffer (过程称为 purge) https://blog.csdn.net/weixin_41563161/arti
用户态内核态 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也
HTTP和FTP的区别 简介 HTTP是Hyper Text Transfer Protocol,超文本传输协议; FTP是File Transfer Protocol,文件传输协议; 简单说HTTP是面向网页的
高性能服务器网络框架 所谓高性能就是服务器能流畅地处理各个客户端的连接并尽量低延迟地应答客户端的请求;所谓高并发,不仅指的是服务器可以同时支持多的客户端连接,而且这些客户端在连接期间内会不断与服务器有数据来往。网络上经常有各种
HashMap在JDK1.7版本头插法实现解析 先解释下何为头插法。大家都知道HashMap在JDK1.7版本的数据结构为数组+链表这样的形式。而头插法说的就是在往HashMap里面put元素时,此时新增在链表上元素的位置为链表头部,也就是数组桶位上的那
从输入一个URL到页面渲染的流程简介 从输入URL到页面加载,简单来说分为以下几个过程: 输入URL DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 解析渲染页面 连接结束 具体过程如下: 首
JVM 调优 简介 1 jps:虚拟机进程状况工具 2 jinfo:Java配置信息工具 3 jmap:Java内存映射工具 4 jhat:虚拟机堆转存储快照分析工具 5 jstack:Java堆栈跟踪工具
死锁 /** * 一个简单的死锁类 * main方法中启动两个线程,分别调用methodA和methodB方法 * methodA方法首先获取到a对象的锁,睡眠1秒钟 * 此时methodB方法执行获取
TreeMap使用场景 优势 优势 先说说红黑树的五点 1 红黑树是牺牲了严格的高度平衡的优越条件为代价,它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。 2红黑树能够以O(log2 n)的时间复杂度进行
打印字节数 public static void main(String[] args) { System.out.println("Byte" + Byte.SIZ
为什么重写equals一定要重写hashcode? 我们都知道,要比较两个对象是否相等时需要调用对象的equals()方法,即判断对象引用所指向的对象地址是否相等,对象地址相等时,那么与对象相关的对象句柄、对象头、对象实例数据、对象类型数据等也是完全一致的,所以我们可
进程、线程和协程之间的区别和联系 1. 进程与线程区别 调度:进程是资源分配的最小单位,线程是程序执行的最小单位。在同一进程中,线程的切换不会引起进程的切换,在不同进程中进行线程的切换,会引起进程的切换。 拥有资源:进程是拥有资源的基本单位,线程不拥
有序递增数据,一个值K,找到最先等于k的下标 给定一个升序的数组,这个数组中可能含有相同的元素,并且给定一个目标值。要求找出目标值在数组中首次出现的下标。 思想:题目给出有序数组,应该想到利用二分查找来做。找到左邻居,使其值加一。利用二分查找,算法复杂度为O(logn) #in
ArrayList的底层原理 ArrayList的数据结构 ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。 对ArrayList进行添加元素
实现线程同步的几种方式总结 在多线程中线程的执行顺序是依靠哪个线程先获得到CUP的执行权谁就先执行,虽然说可以通过线程的优先权进行设置,但是他只是获取CUP执行权的概率高点,但是也不一定必须先执行。在这种情况下如何保证线程按照一定的顺
多线程还是多进程的选择及区别 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网
核心线程是如何被重复利用的? 在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,但如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间
HTTP常用方法 1.GET:获取资源 GET方法用来请求URL指定的资源。指定的资源经服务器端解析后返回响应内容。例子: 2 HEAD:获取报文首部 HEAD方法和GET方法一样,只是不返回报文主体部分
线程如何结束 为什么不用stop()方法 一般来说,当一个线程的方法体执行完,这个方法就会结束了。我们一般不直接使用stop方法来终止线程,这可能会导致业务逻辑不完整或者破坏原子性的操作,一段代码可能用来输出某些
notify()随机唤醒的吗 https://blog.csdn.net/OOC_ZC/article/details/95231713
TCP的深入理解 https://blog.csdn.net/y15201653575/article/details/86469445 三、TCP是底层通讯协议,定义的是数据传输和连接方式的规范 HTTP是应用层协议
二叉搜索树的第k大节点 示例 1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 示例 2: 输入: root = [5,3,6,2,4
序列化 serializable 英[ˈsɪərɪəlaɪzəbl] 美[ˈsɪˌriəˌlaɪzəbl] [词典] 【计】可串行化的;
Java异常体系 https://blog.csdn.net/fengwei4618/article/details/69367650 https://blog.csdn.net/qq_40428105/article/
对象锁和类锁 对象锁 Synchronized修饰非静态方法,是对调用该方法的对象加锁,俗称“对象锁”。 这里的对象加锁并非是说执行该加锁方法的时候整个对象的所有成员都不允许其他线程访问了, 而是说该对象内所有的加
DNS解析详细 (一)什么是DNS 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS解析
线程池关闭以及状态 线程池的状态 线程池状态.png 从上图我们看到线程池总共存在 5 种状态,分别为: RUNNING:线程池创建之后的初始状态,这种状态下可以执行任务。 SHUTDOWN:该状态下线程池不再接受新任务
synchronized 修饰在 static方法和非static方法的区别 在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。那么,在static方法和非stat
操作系统进程线程的理解 https://www.cnblogs.com/guolei2570/p/8810536.html
安全点 我们知道 HotSpot 虚拟机采取的是可达性分析算法。即通过 GC Roots 枚举判定待回收的对象。 那么,首先要找到哪些是 GC Roots。 有两种查找 GC Roots 的方法
binlog redolog MVCC binlog:服务层生产日志,数据恢复、数据库复制 redo log:数据在物理层面的修改,断电恢复、保证一致性和持久性,顺序 :写入数据->redo log buffer-
HashSet的实现原理 HashSet实际上是一个HashMap实例,都是一个存放链表的数组。它不保证存储元素的迭代顺序;此类允许使用null元素。HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现
TreeMap和HashMap的区别 Map:在数组中是通过数组下标来对 其内容进行索引的,而Map是通过对象来对 对象进行索引的,用来 索引的对象叫键key,其对应的对象叫值value; 1、HashMap是通过hashcode()对其内容进行快速
Hashtable与hashMap 原文链接:https://blog.csdn.net/ns_code/article/details/36191279 Hashtable简介 Hashtable同样是基于哈希表实现的
ArrayList和LinkedList的区别 ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。 LinkedLis
柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每
验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输
explain /show processlist explain 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些
最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow&qu
盛最多水的容器 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们
自旋锁原理 如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用
Callable和Future的使用 https://blog.csdn.net/ghsau/article/details/7451464?utm_medium=distribute.pc_relevant.none-task-blog-
Thread 和Runnable的区别 如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。 main函数,实例化线程对象也有所不同, extends Thread :t.start(
无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu
CAS原理 1 CAS初认识 Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的,监视器锁本质又是依赖于底层的操作系统的Mutex Lock(互斥锁)来实现的。而操作系统实现线程之间的切换
多路io复用 目录 多路io复用 前夕 高性能IO模型浅析 一、同步阻塞IO 二、同步非阻塞IO 三、IO多路复用 几个函数
Java和python的区别 第一:语法结构。在语法结构上,Java语言是纯粹的面向对象语言,Python语言的语法结构结合了函数式编程的直接性和面向对象语言的灵活性。 第二:开发周期。在开发周期方面,Python语言无疑具有较为明显的优势,一个重要的原因在于Python语言有丰富的“库”,P
Socket详解 1 Socket初认识 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接
两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
leetcode:两数之和,三数之和 两数之和 题目: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], tar
JVM优化 1、一般来说,当survivor区不够大或者占用量达到50%,就会把一些对象放到老年区。通过设置合理的eden区,survivor区及使用率,可以将年轻对象保存在年轻代,从而避免full GC,使用-Xmn设
hashmap底层实现 1底层自己实现 /** * @Auther: liuhaidong * Data: 2020/3/6 0006、23:53 * Description: * @version: 1.0 */ p
Lock实现原理 Lock完全用Java写成,在java这个层面是无关JVM实现的。 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、Rea
Linux面试问题---常用命令 1、cd命令 用于切换当前目录,参数是要切换到的目录的路径。 Cd /root/Documents #切换到/root/Documents目录 Cd ./path 切换到当前目录下的path目录
外部排序 有时,待排序的文件很大,计算机内存不能容纳整个文件,这时候对文件就不能使用内部排序了(这里做一下说明,其实所有的排序都是在内存中做的,这里说的内部排序是指待排序的内容在内存中就可以完成,而外部排序是指待排
CPU占用过高问题的排查及解决 排查步骤 1.使用top 定位到占用CPU高的进程PID 然后按shift+p按照CPU排序 2.查看Java进程里面的线程的占用情况 或者是再用ps -mp pid -o THREAD,tid,t
数据链路层---差错检测和纠正 目录 数据链路层---差错检测和纠正 一、差错检测 二、差错纠正 1、反馈检测法 2、空闲重发请求方案 3、连续重发请求方案 帧同步虽然可以区分每个
java 多线程 四个窗口卖100张票 public class IOTest { public static void main(String[] args) { TicketSell t1 = new Tick
线程间通信 1.两个数字交替打印 1.1自定义锁 使用volatile保证数据的可见性,避免多线程访问同一个变量,它的值刷新不及时的问题;设想定义一个volatile修饰的boolean变量flag,当flag为true
反射机制 反射是一种机制 , 通过这种机制我们可以知道一个未知类型的类型信息 如 ,有一个对象 a, 这个对象不是我们定义的,也许是通过网络捕捉到的,也许是使用泛型定义的,但我们想知道这个对象的 类型信息,想知道这个
String、StringBuffer和StringBuilder的区别和实现原理 https://www.cnblogs.com/shangxiaofei/p/6377136.html String String是java中用的最频繁的类之一,其内部原理是通过cha
不用数据库实现数据库功能 简略版本 阶段1: 无事务, 单线程, 仅存在于内存的数据库. 该状态下的数据库, 其实就是一个”索引结构”+”语法分析器”. 语法分析器分析SQL语句, 然后根据逻辑, 去执行相应的操作. 索
最短路径算法---有向图、 最短路算法 最常用的最短路算法是Dijkstra算法、A*算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法,我们这里重点介绍并实现Dijkstra和SPFA,
最短路径算法 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法。该算法被称为是“贪心算法”的成功典范。 1、表示图的数据结构 邻接列表 邻接列表:在邻接列表实现中,每一个顶点会存储一个
K短路径算法 算法背景 K 最短路径问题是最短路径问题的扩展和变形。1959 年,霍夫曼(Hoffman) 和帕夫雷(Pavley)在论文中第一次提出k 最短路径问题。 k 最短路径问题通常包括两类:有限制
喝啤酒问题 public static void main(String[] args) { System.out.println(help(8)); } public stati
扫码登录背后的实现原理 1)网页端与服务器的配合逻辑: 首先用户打开网站的登录页面的时候,向浏览器的服务器发送获取登录二维码的请求。服务器收到请求后,随机生成一个uuid,将这个id作为key值存入redis服务
java面试 –红黑树(插入删除过程详解) 目录 java面试 –红黑树(插入删除过程详解) 红黑树性质 左旋右旋 插入过程 1. 父为黑 2. 父为红 删除过程 定义 红黑树实际删
生成随机数 做一串8位随机数包含大写字母和两个数字 public class Main3 { public static void main(String[] args) { Random
Sql语句面试大全总结 1建表 CREATE TABLE IF NOT EXISTS Test( id INT AUTO_INCREMENT, //自增长 username V
java中的闭包 闭包(Closure)是一种能被调用的对象,它保存了创建它的作用域的信息。JAVA并不能显式地支持闭包,但是在JAVA中,闭包可以通过“接口+内部类”来实现,因为对于非静态内部类而言,它不仅记
Map集合中value()方法与keySet()、entrySet()区别 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet(): 将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根
Queue 与List、LinkedList与 ArrayList 区别 List List 是一个接口,不能实例化,通过实例化ArrayList 或者LinkedList来调用:List list = new ArrayList(); |--List: 元素是有序的(
完全平方数 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 1
Top-N 1 •如何在500w个单词中统计特定前缀的单词有多少个? 字典树 https://mp.weixin.qq.com/s/t8P4E_-zqhXzcGDWEf-wSw https://blog.
二叉树的堂兄弟节点 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。 我们给出了具有唯一值的二叉树的根节点
Springmvc面试 1 Springmvc执行流程 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找 Handler
Mybatis mybatis框架执行过程: 1、配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2、通过配置文件,加载mybatis运行环境,创建SqlSessi
git常用命令与常见面试题总结 git框架介绍 Workspace:开发者工作区 Index / Stage:暂存区/缓存区 Repository:仓库区(或本地仓库) Remote:远程仓库 列举工作中常用的几
Activiti 什么是工作流,工作流的核心对象是什么,activiti共操作数据库多少张表 * 工作流就是多个参与者,按照某种预定义的规则,传递业务信息,进行审核的功能一个框架(Activiti) * p
redis 在我们日常的Java Web开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情
redis 1 redis是什么 redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队
建造者模式 概述 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创
2 的幂次方 问题描述:判断一个整数 n 是否为 2 的幂次方 对于这道题,常规操作是不断着把这个数除以 2,然后判断是否有余数,直到 n 被整除成 1 。 我们可以把 n 拆成二进制看待处理的,如果 n 是
LRU 缓存算法 一、题目描述 运用你所掌握的数据结构,设计和实现一个 LRU(最近最少使用)缓存机制。它应该支持以下操作: 获取数据 get(key):如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返
优化查询方法 1 使用索引 首先在where、order by、group by建立索引 2 优化Sql语句 通过explain查看SQL语句执行的效果 explain select * fr
Jdk1.7 与 jdk1.8的区别,最新的特征有哪些 在jdk7的新特性方面主要有下面几方面的增强: 1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头。 所有整数int、short、long、byte都可以用二进制表示: byte aByte = (
什么是 NIO? NIO 和 BIO、AIO 之间的区别是什么?NIO主要用来解决什么问题?面试问题? 1 BIO,NIO,AIO都有什么区别,NIO的原理是什么? BIO BIO:传统的网络通讯模型,就是BIO,同步阻塞IO, 其实就是服务端创建一个ServerSocket, 然后就是客户端
java最全面经链接总结 目录 场景题 关于redis的 分布式锁,如何添加,放在什么位置 Spring源码 Java(总结完) 1一个变量从产生到结束所经历的过程,讲一下字符串常量的过程? 2 Integer和int有啥区别,integer
扫一扫,把题目装进口袋
扫描二维码,进入QQ群
扫描二维码,关注牛客网公众号