11 2020 档案

摘要:给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。 若可行,输出任意可行的结果。若不可行,返回空字符串。 leetcode 解题思路: 首先想想什么样的情况下不能构成可行的字符串,就像植树问题,最大的相同的字符个数一定小于字符串长度加一再除以二,如果超了就肯定会相邻。所以,我们在 阅读全文
posted @ 2020-11-30 15:49 lippon 阅读(900) 评论(0) 推荐(0)
摘要:简介 LinkedList是一个链表结构的列表,也可以被作为堆栈、队列或双端队列使用。它继承于AbstractSequentialList双向链表,实现了List、Deque、Cloneable、java.io.Serializable接口。 源码分析 public class LinkedList 阅读全文
posted @ 2020-11-30 11:09 lippon 阅读(138) 评论(0) 推荐(0)
摘要:简介 ArrayList 是一个数组列表,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。 其继承关系如下: 源码分析 这里的代码是J 阅读全文
posted @ 2020-11-29 20:08 lippon 阅读(130) 评论(0) 推荐(0)
摘要:集合框架 集合框架如图所示 Java集合是Java提供的工具包,主要包括常用的数据结构,包括:集合、链表、队列、栈、数组、映射等。 集合的工具包位置是java.util.* 集合主要可以分为五类: List列表;Set集合;Map映射;Queue队列工具类(Iterator迭代器、Enumerati 阅读全文
posted @ 2020-11-29 16:14 lippon 阅读(107) 评论(0) 推荐(0)
摘要:索引 1. 什么是索引? 数据库用于提升查找速度的一种手段。 2. 索引分类 B+树索引 传统意义上的索引,最常用和最有效的。哈希索引 一种自适应,数据库根据表的使用情况自动生成。全文索引 用于实现关键词的搜索,根据空格来分词,不支持没有空格的语言。Rtree索引 MySQL上使用很少,范围查找很快 阅读全文
posted @ 2020-11-29 09:34 lippon 阅读(206) 评论(0) 推荐(0)
摘要:给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 leetcode 解题思路: 首先想到的是暴力深搜,枚举每一种做 阅读全文
posted @ 2020-11-28 15:51 lippon 阅读(205) 评论(0) 推荐(0)
摘要:什么是数据库的事务? 事务是访问并更新数据库中各种数据的一个程序执行单元。事务也是数据库区别于文件系统的一个重要特性。 事务需要满足的特性 1.原子性 原子性就是指数据库中的一个完整的事务是不可分割的工作单位。要么都成功,要么都失败,不能执行一部分。 2.一致性 一致性指事务将数据库从一种状态转变为 阅读全文
posted @ 2020-11-28 14:27 lippon 阅读(114) 评论(0) 推荐(0)
摘要:给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 leetcode 阅读全文
posted @ 2020-11-27 19:17 lippon 阅读(887) 评论(0) 推荐(0)
摘要:给定一个方阵,其中每个单元(像素)非黑即白。设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号,size 是子方阵的边长。若有多个满足条件的子方阵,返回 r 最小的,若 r 相同,返回 c 最小的子方阵。 阅读全文
posted @ 2020-11-27 16:50 lippon 阅读(239) 评论(0) 推荐(0)
摘要:什么是数据库的锁? 锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问。让数据库事务满足隔离性的要求。 InnoDB 中锁的作用 不仅用于对数据进行并发访问,还还包括了缓冲池中给LRU列表的操作。从而提供了数据的完整一致性。 latch与lock的区别? latch是轻量 阅读全文
posted @ 2020-11-27 14:27 lippon 阅读(114) 评论(0) 推荐(0)
摘要:给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。 leetcode 解题思路:如果进行排序,这里会超时。采用桶排序的思想,可以在线性时间解决。 首先建立桶,每个桶中只需要存放这个桶中元素的最大值和最小值。桶尺寸就是数组中元素范围再除以数组的大小 阅读全文
posted @ 2020-11-26 19:46 lippon 阅读(149) 评论(0) 推荐(0)
摘要:给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions,其中positions[i]为smalls[i]出现的所有位置。 leetcode 字典树 解题 阅读全文
posted @ 2020-11-25 16:51 lippon 阅读(303) 评论(0) 推荐(0)
摘要:索引概述 索引太多可能会降低运行性能,太少就会影响查询性能。 最开始就要在需要的地方添加索引。 常见的索引: B+树索引全文索引哈希索引 B+树索引 B+树 所有的叶子节点存放完整的数据,非叶子节点就是索引节点,只存放索引信息。 1. 插入操作 插入操作需要考虑节点是否被占满了,如果满了,久需要生成 阅读全文
posted @ 2020-11-25 14:01 lippon 阅读(152) 评论(0) 推荐(0)
摘要:你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。 你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。 每次移动,你可以取一 阅读全文
posted @ 2020-11-24 20:49 lippon 阅读(554) 评论(0) 推荐(0)
摘要:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 添加链接描述 解题思路: 再计算过程中,会产生负数和正数,需要同时保存最小的负数和最大的整数,因为乘起来的时候都有可能是产生更大的结果。利用两个变量,一个存储最大值,一个存储 阅读全文
posted @ 2020-11-24 16:13 lippon 阅读(247) 评论(0) 推荐(0)
摘要:给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 leetcode 解题思路: 如果是暴力做法,就只 阅读全文
posted @ 2020-11-24 14:00 lippon 阅读(557) 评论(0) 推荐(0)
摘要:表是什么? 就是关于特定实体地数据集合,是关系型数据库模型地核心。 索引组织表 什么是索引组织表? 表中数据都是根据主键的顺序组织存放的,这种存储方式就是索引组织表。就是存储在一个索引结构中的表。 也就是B+树的结构。 每张表都需要一个主键,如果没有定义,引擎就会去产生主键信息: 表中存在非空唯一索 阅读全文
posted @ 2020-11-24 11:10 lippon 阅读(113) 评论(0) 推荐(0)
摘要:构成MySQL数据库和InnoDB存储引擎表的文件类型有: 参数文件:MySQL实例运行时需要的参数就是存储在这里。日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件。socket文件:用于套接字连接。pid文件,MySQL实例的进程ID文件。MySQL表结构文件:用来存放MySQL表结 阅读全文
posted @ 2020-11-24 09:20 lippon 阅读(134) 评论(0) 推荐(0)
摘要:1.概述 是一个高性能、高可用、高扩展的存储引擎。 2.InnoDB体系架构 InnoDB存储引擎主要由内存池和后台线程构成。 其中,内存池由许多个内存块组成,作用如下: 维护所有进程和线程需要访问的内部数据结构。缓存磁盘上的数据,提高处理器读取速度,当数据被修改的时候也是先修改这里的数据,再被后台 阅读全文
posted @ 2020-11-23 20:18 lippon 阅读(113) 评论(0) 推荐(0)
摘要:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? leetcode 解题思路:利用动态规划的思想。从小到大遍历每个节点数量的情况。 首先是状态标识,利用里一个数组,标识不同节点数量下的情况。然后是状态转移,在从头遍历到结尾,枚举每一个中间节点为根时的组合数量,再累加就是当前节点数 阅读全文
posted @ 2020-11-23 17:10 lippon 阅读(117) 评论(0) 推荐(0)
摘要:前序遍历转换问题 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 leetcode 迭代 解题思路:通过栈来中序遍历这个二叉搜索树。 遍历的时候,第一次遍历到底部的时候,那个节点就是头节点。每次遍历的时候都要存下当前节点为前节点 阅读全文
posted @ 2020-11-23 15:47 lippon 阅读(307) 评论(0) 推荐(0)
摘要:1.数据库和实例 数据库(database)和实例(instance)不能混淆。 什么是数据库 数据库是物理操作系统文件或其他文件类型的集合。说白了,就是存储着的文件,不会运行起来,只能被实例增删改查,用户不能脱离实例,直接操作。 什么是实例 实例是MySQL数据库由后台线程以及一个共享内存区组成。 阅读全文
posted @ 2020-11-23 09:51 lippon 阅读(89) 评论(0) 推荐(0)
摘要:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 leetcode 解题思路: 首先想暴力该怎么做? 就是依次遍历数组,求以每一个柱子为高度的最大面积,当遍历到一个元素的时候,在去找到它的左右两边第一个比它小的柱 阅读全文
posted @ 2020-11-22 22:01 lippon 阅读(121) 评论(0) 推荐(0)
摘要:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 leetcode 解题思路:动态规划。 首先建立状态表示数组,通过一个二维数组,表示两个字符串,在各自不同的长 阅读全文
posted @ 2020-11-22 17:03 lippon 阅读(1557) 评论(0) 推荐(0)
摘要:用于总结操作系统相关的知识点,会参考很多人的,也会加入自己的理解,在未来不断更新。 问题总结 操作系统的四个特性。操作系统的主要功能。进程的有哪几种状态,状态转换图,及导致转换的事件。进程与线程的区别。进程通信的几种方式。进程同步的几种方式用户态和核心态的区别。死锁的概念,导致死锁的原因;导致死锁的 阅读全文
posted @ 2020-11-22 10:59 lippon 阅读(422) 评论(0) 推荐(0)
摘要:有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。 leetcode 纯DP方法 解题思路:首先根据身高将数组顺序排列,然后将身高相同的根据体重顺序排列。这样就 阅读全文
posted @ 2020-11-21 20:01 lippon 阅读(211) 评论(0) 推荐(0)
摘要:每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量。有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来。给定两个列表,一个是名字及对应的频率,另一个是本质相同的名字对。设计一个算法打印出每个真实名字的实际频率。注意,如果 Joh 阅读全文
posted @ 2020-11-21 16:42 lippon 阅读(112) 评论(0) 推荐(0)
摘要:1.HTTP简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容优先显示。 2. 阅读全文
posted @ 2020-11-21 11:37 lippon 阅读(418) 评论(0) 推荐(0)
摘要:求最长合法括号序列问题 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 leetcode 解题思路: 利用一个前缀和的思想,顺序遍历,遇到左括号和加一;遇到右括号,和减一。当和为0的时候,就是一个合法序列。如果和为负数,那么以当前起点产生的序列不再可能产生合法的序 阅读全文
posted @ 2020-11-20 20:15 lippon 阅读(142) 评论(0) 推荐(0)
摘要:给你一个链表数组,每个链表都已经按升序排列。 你将所有链表合并到一个升序链表中,返回合并后的链表。 leetcode 解题思路:利用一个优先队列,对有序链表的头节点进行维护,每次取出一个队列头,就能取到节点中的最小值,然后添加到新建的链表尾部,然后如果这个节点有next,就把他的next再放进优先队 阅读全文
posted @ 2020-11-19 21:01 lippon 阅读(314) 评论(0) 推荐(0)
摘要:给定一个包含正整数、加(+)、减(-)、乘( * )、除(/)的算数表达式(括号除外),计算其结果。 表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。 leetcode 解题思路:模拟CPU进行运算的方式,利用栈的思想。遍历字符串,如果遇到符号,则读取下一个数 阅读全文
posted @ 2020-11-19 14:18 lippon 阅读(226) 评论(0) 推荐(0)
摘要:传输层概述 传输层的作用 为上面的应用层提供通信服务。多路复用和分用。 复用:多个应用程度共用一个传输层。分用:当传输层从网络层接收数据后,根据端口号将数据正确递交给不同的个应用程序。 根据协议不同,提供的不同服务。例如寻址的功能,定位应用程序在哪里。以及流量的控制,防止接收端速度太慢造成溢出和丢包 阅读全文
posted @ 2020-11-19 10:44 lippon 阅读(591) 评论(0) 推荐(0)
摘要:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值, 阅读全文
posted @ 2020-11-18 21:23 lippon 阅读(158) 评论(0) 推荐(0)
摘要:在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 l 阅读全文
posted @ 2020-11-18 19:30 lippon 阅读(129) 评论(0) 推荐(0)
摘要:OSI参考模型 协议分层 为什么需要分层? 简化网络协议。每一层只需要衔接上下层的服务。利于模块化开发。解耦。 分层的问题 过分模块化、提高数据处理的开销。 OSI参考模型 作用及意义 将复杂的通信协议整理为7个容易理解的层次。对通信中的必要功能做了归纳。没有详细定义协议和接口,只是规定了各个层的大 阅读全文
posted @ 2020-11-17 20:30 lippon 阅读(156) 评论(0) 推荐(0)
摘要:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 阅读全文
posted @ 2020-11-16 20:09 lippon 阅读(449) 评论(0) 推荐(0)
摘要:给定一个带权有向图,计算任意两结点间的最短路径。 算法思想:遍历每个点到另外点的距离。三层循环,第一层枚举中间点,第二层和第三层枚举起点和终点。 public static void main() { int N = 1010, M = 2000010, INF = 1000000000; int[ 阅读全文
posted @ 2020-11-16 19:18 lippon 阅读(285) 评论(0) 推荐(0)
摘要:题目 n个村庄间架设通信线路,每个村庄间的距离不同,如何架设最节省开销? Kruskal算法 特点 适用于稀疏图,时间复杂度 是nlogn的。 核心思想 从小到大选取不会产生环的边。 代码实现 代码中需要采用并查集的方法检测是否有环。 static class Edge { int a, b, va 阅读全文
posted @ 2020-11-16 16:44 lippon 阅读(207) 评论(0) 推荐(0)
摘要:什么是霍夫曼树 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化。 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为霍夫曼树(Huffman Tree)。 霍夫曼树的构造思路 若要使得带权外路径长度最小, 阅读全文
posted @ 2020-11-16 16:02 lippon 阅读(743) 评论(0) 推荐(0)
摘要:你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b 阅读全文
posted @ 2020-11-16 15:30 lippon 阅读(118) 评论(0) 推荐(0)
摘要:什么是线程安全 当多个线程同时访问一个对象的时候,不需要考虑什么额外的操作就能获取正确的值,就是线程安全的。 线程安全的程度 1.不可变 不可变的对象一定是线程安全的,因为值始终只有一个。 final,这种安全是最直接最纯粹的。 2.绝对线程安全 不管运行时环境如何,调用者都不需要任何额外的同步措施 阅读全文
posted @ 2020-11-16 10:33 lippon 阅读(111) 评论(0) 推荐(0)
摘要:即时编译器 Java程序最初都是通过解释器进行执行,当发现某个方法或者代码块被运行得非常频繁,这些代码就被认为是热点代码,为了提高这些代码得运行效率,虚拟机会把热点代码编译成本地机器码,并进行优化,运行时完成这个任务的后端编译器被称为即时编译器。 解释器与编译器 主流Java虚拟机内部同时包含解释器 阅读全文
posted @ 2020-11-16 09:37 lippon 阅读(118) 评论(0) 推荐(0)
摘要:给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。请找出一条直线,其通过的点的数目最多。 设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S,你仅需返回[S[0],S[1]]作为答案,若有多条直线穿过了相同数量的点,则选择S[0]值 阅读全文
posted @ 2020-11-15 20:13 lippon 阅读(572) 评论(0) 推荐(0)
摘要:给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 leetcode 解题思路:如果这个数的各个位是递增的,那么直接从最后面开始移除一定就是最最小的;如果这个数的位值不是底层的,那么,尽量移除高位的逆序数字。如果最后变成递增了之后,k还有的剩,就再从后面移除大的 阅读全文
posted @ 2020-11-15 14:57 lippon 阅读(325) 评论(0) 推荐(0)
摘要:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 leetcode 解题思路:迭代模拟每个情况下,概率的累加值。 分成三重循环: 第一层循环 阅读全文
posted @ 2020-11-15 14:14 lippon 阅读(320) 评论(0) 推荐(0)
摘要:ConcurrentHashMap 为什么需要ConcurrentHashMap HashMap线程不安全,因为HashMap的Entry是以链表的形式存储的,如果多线程操作可能会形成环,那样就会死循环。HashTable效率低,利synchronized保证线程安全,同时只有一个线程访问其同步方法 阅读全文
posted @ 2020-11-15 11:13 lippon 阅读(115) 评论(0) 推荐(0)
摘要:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 解题思路:利用与或符号,模拟位的加法与进位。 位的异或就是当前位的加法,但是没有办法算进位,所以,需要通过位与和左移来算进位,如果两个都是1,那么进位才是1。 为什么负数也能适用呢? 以 9 + (- 阅读全文
posted @ 2020-11-14 20:52 lippon 阅读(113) 评论(0) 推荐(0)
摘要:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 leetcode 解题思路:如何不用上面的条件判断语句,还是能判断传入参数的大小呢?这里就可以利用逻辑与和或的运算规则。 逻辑与 && 当运算符前面的条件为假, 阅读全文
posted @ 2020-11-14 20:22 lippon 阅读(79) 评论(0) 推荐(0)
摘要:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 leetcode 解题思路:约瑟夫 阅读全文
posted @ 2020-11-14 16:58 lippon 阅读(162) 评论(0) 推荐(0)
摘要:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 leetcode 解题思路:采用单调队列的思想,队列中应该是单调递减的,大的值先出队列,这样,每次在取滑动窗口的最大值的时候,就取队首元素即可。 单调队列入队操作 这个和单调栈差不多,当前元素和队尾元素进行比较,如果队尾元 阅读全文
posted @ 2020-11-14 16:06 lippon 阅读(149) 评论(0) 推荐(0)
摘要:Executor框架简介 从JDK5开始,把工作单元和执行机制分离开来了,工作的单元包括Runnable和Callable,执行机制就是由Executor框架提供。 Executor两级调度模型 HotSpot虚拟机将Java线程映射为操作系统的线程。 在上层,Java多线程程序将应用分解为多个任务 阅读全文
posted @ 2020-11-14 11:21 lippon 阅读(68) 评论(0) 推荐(0)
摘要:线程池的作用 降低资源消耗。重复利用已有线程,减少线程的创建和销毁造成的消耗。提高响应速度。当有任务需要处理的时候,就不用再花费重新创建线程的时间了。提高线程的可管理性。不合理利用线程,会浪费资源,影响系统稳定,线程池可以对线程进行统一分配、调优和监控。 线程池的实现原理 线程池由两种觉得组成:多个 阅读全文
posted @ 2020-11-14 10:12 lippon 阅读(85) 评论(0) 推荐(0)
摘要:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 解题思路: 首先通过一次遍历,获取所有元素的异或值;计算异或值中的一个值是1的位,这个位就是答案中两个数字的不同之处;利用这个位,在于求部分 阅读全文
posted @ 2020-11-13 20:43 lippon 阅读(120) 评论(0) 推荐(0)
摘要:闭锁:CountDownLatch 使用场景 当前线程需要等待若干条线程执行完毕后,才能继续执行的情况。 也可以是若干个步骤执行完毕后的情况。 使用方法 初始化闭锁的时候,填入计数值,然后等待其他线程或者步骤对计数值进行操作减减。当计数值变为0的时候,线程就会从闭锁的await()方法处继续执行。 阅读全文
posted @ 2020-11-13 10:58 lippon 阅读(105) 评论(0) 推荐(0)
摘要:锁的作用 控制多个线程访问共享资源。线程协作 Lock接口 特点 与synchronized类似的同步功能,只是需要显式地获取和释放锁。缺少隐式获取锁的便捷性。拥有锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种同步特性。可扩展性好。尝试非阻塞地获取锁:如果当前时刻锁没有被占用,则获得锁。 阅读全文
posted @ 2020-11-13 10:24 lippon 阅读(75) 评论(0) 推荐(0)
摘要:为什么需要线程间通信 让线程之间合作,提高运行效率。 volatile和synchronized关键字 实现原理 这两个方式都是采用共享内存的方式进行通信,通过同步机制保证数据可见性和排他性。 特点 本质是数据共享。不能特定地传给某个线程数据,需要程序员自己编写逻辑。数据在各个线程的更新顺序由操作系 阅读全文
posted @ 2020-11-13 08:49 lippon 阅读(85) 评论(0) 推荐(0)
摘要:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 leetcode 解题思路:对数组进行重新排序,排序规则是,分别将两个数值放在前后位置,然后比较作为返回。 class Solution { public String minNumber(int[] n 阅读全文
posted @ 2020-11-12 19:09 lippon 阅读(69) 评论(0) 推荐(0)
摘要:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 请写一个函数,求任意第n位对应的数字。 leetcode 解体思路:找规律。 相同位数的数字数量的递增关系是10, 90, 900, 9 阅读全文
posted @ 2020-11-12 17:07 lippon 阅读(112) 评论(0) 推荐(0)
摘要:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 leetcode 解题思路:依次遍历每一个位的情况。即统计,小于当前数字的数中,每一个位为1的数量。 当前位是0:则不存小于去掉高位,当前位 阅读全文
posted @ 2020-11-12 16:53 lippon 阅读(263) 评论(0) 推荐(0)
摘要:假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调用该方法; 实现 getRankOfNumber(int x) 方法,返回小于或等于 x 的值的个 阅读全文
posted @ 2020-11-12 15:07 lippon 阅读(147) 评论(0) 推荐(0)
摘要:什么是中断 Java的一种机制,用于一个线程去暂停另一个线程的运行。就是一个正在运行的线程被其他线程给打断,停止运行挂起了。 我觉得,在Java中,这种中断机制只是一种方便程序员编写进程间的通信罢了。 如何中断 interrupt() 其他线程调用这一线程的这一方法来对其进程中断。isInterru 阅读全文
posted @ 2020-11-12 10:03 lippon 阅读(133) 评论(0) 推荐(0)
摘要:线程 什么是线程 操作系统调度的最小单元就是线程,也叫轻量级进程。 为什么要使用多线程 多线程程序能够更有效率地利用多处理器核心。用户响应时间更快。方便程序员将程序模型映射到Java提供的多线程编程模型上。 线程的状态 1. 初始态 NEW 线程被构建,但是还没有调用start()方法调用。 2 运 阅读全文
posted @ 2020-11-12 09:25 lippon 阅读(80) 评论(0) 推荐(0)
摘要:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 leetcode 解题思路:中序遍历链表,保留上一个节点,每次遍历到一个节点的时候,将上一个节点right指向当前节点,再将当前节点的left指向上个节点。 第一次枚举到left的 阅读全文
posted @ 2020-11-11 17:21 lippon 阅读(64) 评论(0) 推荐(0)
摘要:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 链接:leetcode 解题思路:不同于简单列表的复制,这个多了一个随机指针。如果是简单列表,直接构造一个新 阅读全文
posted @ 2020-11-11 16:51 lippon 阅读(93) 评论(0) 推荐(0)
摘要:稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。 leetcode 解题思路:主要还是利用二分的思想,因为排除空格,这个数组还是有序的。但是需要在搜索的时候,跳过空格。 怎么跳呢?首先需要保证二分的两段元素不是空格,然后保证枚举的中间元素不能是空格。 阅读全文
posted @ 2020-11-11 15:27 lippon 阅读(94) 评论(0) 推荐(0)
摘要:什么是JMM JMM就是Java内存模型。目的是为了屏蔽系统和硬件的差异,让同一代码在不同平台下能够达到相同的访问结果。规定了线程和内存之间的关系。 内存划分 JMM规定了内存主要划分为主内存和工作内存。 如果Java线程都去操作主内存,对性能的影响就很大,如果每个线程都具有自己的工作内存,然后再将 阅读全文
posted @ 2020-11-11 10:08 lippon 阅读(114) 评论(0) 推荐(0)
摘要:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 链接: leetcode. 解题思路:从后往前遍历,检测到第一个如果前一元素小于当前元素,那就说明下 阅读全文
posted @ 2020-11-10 10:57 lippon 阅读(140) 评论(0) 推荐(0)
摘要:什么是synchronized synchronized可以保证某个代码块或者方法被一个线程占有,保证了一个线程的可先性。java 1.6之前是重量级锁,在1.6进行了各种优化,就不那么重了,并引入了偏向锁和轻量级锁,以及锁的存储结构和升级过程。 synchronized实现方式 Java中每个对象 阅读全文
posted @ 2020-11-10 10:22 lippon 阅读(85) 评论(0) 推荐(0)
摘要:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 链接: leetcode. 解题思路:暴力的方法就是一个一个乘,时间是O(n)的。快速幂的核心思想就是,用位的方式,快速相乘。幂的本质是 阅读全文
posted @ 2020-11-09 19:58 lippon 阅读(95) 评论(0) 推荐(0)
摘要:什么是volatile Java语言允许线程访问共享变量,为了确保共享变量能够被准确一致地更新,如果一个字段被声明为volatile,那么Java内存模型将会确保所有线程看到这个变量时值是一致的。保证了多处理器开发中,共享变量的可见性。 volatile的使用 public volatile int 阅读全文
posted @ 2020-11-09 14:13 lippon 阅读(119) 评论(0) 推荐(0)
摘要:并发编程是为了使程序运行得更快,但是,不是启动更多得线程就能最大限度地执行并发,也不是线程更多就能使得程序运行得更快,而且并发编程更容易产生错误,如果要高效且正确地执行并发,就需要注意这三种问题 上下文切换死锁资源限制 上下文切换 线程运行机制 一个CPU同时只能运行一个线程;操作系统给每条分配时间 阅读全文
posted @ 2020-11-09 09:33 lippon 阅读(83) 评论(0) 推荐(0)
摘要:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。 给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知 阅读全文
posted @ 2020-11-08 16:28 lippon 阅读(617) 评论(0) 推荐(0)
摘要:在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动一个盘子; (2) 盘子只能从柱子顶端滑出移到下一根柱子; (3) 盘子只 阅读全文
posted @ 2020-11-08 15:21 lippon 阅读(147) 评论(0) 推荐(0)
摘要:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 链接: link. 解题思路:利用单调栈的思想。 从左向右遍历,栈中不断存储左侧的柱子,而且是单调下降的。当后者的柱子长度大于前者的,就会形成一个蓄水区域,当一个蓄水区域形成之后,短的柱子就没有用了, 阅读全文
posted @ 2020-11-07 20:05 lippon 阅读(381) 评论(0) 推荐(0)
摘要:n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。 每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。 链接: leetcode. 解题思 阅读全文
posted @ 2020-11-07 13:58 lippon 阅读(244) 评论(0) 推荐(0)
摘要:是什么是类加载机制 Java虚拟机将class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程就是类加载机制。 类的生命周期 一个类从加载到内存开始,到卸载出内存为止,一共经历七个阶段: 加载——>验证——>准备——>解析——>初始化——>使用 阅读全文
posted @ 2020-11-07 11:11 lippon 阅读(140) 评论(0) 推荐(0)
摘要:Java的无关性 由于计算机领域中有很多操作系统和硬件平台同时在竞争,所以,很多编程语言的程序设计会与其运行的平台和操作系统产生耦合,这样就大大增加了程序员的工作,为了适应不同的平台,需要修改很多代码。这样,具有无关性特征的Java语言就开始受欢迎了。 平台的无关性:由于有可以运行在不同硬件平台和操 阅读全文
posted @ 2020-11-06 10:47 lippon 阅读(104) 评论(0) 推荐(0)
摘要:二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字不在0和1之间,或者无法精确地用32位以内的二进制表示,则打印“ERROR”。 链接: leetcode. 二进制小数转化为十进制 十进制小数转化为二进制 class Solution 阅读全文
posted @ 2020-11-05 16:28 lippon 阅读(186) 评论(0) 推荐(0)
摘要:大内存硬件上的程序部署策略 单个虚拟机管理大内存 出现问题 如果JVM中的堆内存太小,就会频繁地出发GC,而每次GC会将用户线程暂停,所以,频繁地GC会导致长时间的停顿。如果扩大计算的内存的大小,就能降低GC触发的频率。 32位系统最大支持4g内存,而64位操作系统可以最大支持128g内存,所以,我 阅读全文
posted @ 2020-11-05 10:35 lippon 阅读(104) 评论(0) 推荐(0)
摘要:进程状况工具:jps jps(JVM Process Status Tool) 作用 用于虚拟机中正在运行的所有进程。显示虚拟机执行的主类名称以及这些进程的本地虚拟机唯一ID。可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,参数hostid为RMI注册表中注册的主机名 特点 使用频率最高 阅读全文
posted @ 2020-11-05 09:15 lippon 阅读(70) 评论(0) 推荐(0)
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 输入: [7,5,6,4] 输出: 5 链接: leetcode. 解题思路:利用归并排序的思想。在归并排序中,需要通过两个指针比较前后两个元素的大小,当前元素大于后元素时, 阅读全文
posted @ 2020-11-04 19:37 lippon 阅读(143) 评论(0) 推荐(0)
摘要:垃圾收集器 新生代收集器 1.Serial收集器 特点: 单线程工作,收集的时候就会停止其他所有工作线程,用户不可知不可控,会使得用户界面出现停顿。简单高效,是所有收集器中额外内存消耗最少的。没有线程交互的开销,单线程收集效率高。对于客户端模式下的虚拟机是一个很好的选择。采用标记复制算法。 2.Pa 阅读全文
posted @ 2020-11-04 09:13 lippon 阅读(180) 评论(0) 推荐(0)
摘要:栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。 leetcode. 思路:利用两个栈,分别实现大顶堆和小顶堆,以 阅读全文
posted @ 2020-11-03 21:47 lippon 阅读(680) 评论(0) 推荐(0)
摘要:思路:利用快慢指针思想,快指针每次走两步,慢指针走一步。当快指针走到底的时候,满指针指向的就是链表的中间节点。需要注意的是,当链表长度为偶数位的时候,则慢指针指向的是中间偏右的节点,奇数的时候,指向的是中间节点。 if(head == null || head.next == null) retur 阅读全文
posted @ 2020-11-03 16:39 lippon 阅读(429) 评论(0) 推荐(0)
摘要:所谓垃圾收集器的作用就是回收内存空间中不需要了的内容,需要解决的问题是回收哪些数据,什么时候回收,怎么回收。 Java虚拟机的内存分为五个部分:程序计数器、虚拟机栈、本地方法栈、堆和方法区。 其中程序计数器、虚拟机栈和本地方法栈是线程私有的,所以对于何时回收这三部分内存只需要根据线程的生存周期就可以 阅读全文
posted @ 2020-11-03 15:17 lippon 阅读(66) 评论(0) 推荐(0)
摘要:对象的创建 虚拟机遇到一条字节码new指令时,开始对象创建过程。 首先去检查这个指令的参数是否能在常量池定位到一个类的符号引用;检查这个符号引用代表的类是否已被加载、解析和初始化,如果没有就必须执行相应的类加载过程;根据方法区中该类的信息确定对象的所需空间大小;虚拟机为新生对象分配内存;将对象实例的 阅读全文
posted @ 2020-11-03 09:28 lippon 阅读(124) 评论(0) 推荐(0)
摘要:给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。 然而,两个相同种类的任务之间必须有长度为 n 阅读全文
posted @ 2020-11-02 16:15 lippon 阅读(97) 评论(0) 推荐(0)
摘要:给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 你找到的子数组应是最短的,请输出它的长度。 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都 阅读全文
posted @ 2020-11-02 15:25 lippon 阅读(76) 评论(0) 推荐(0)
摘要:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 链接: leetcode. 解题思路: 第一反应回想到双指针的算法,但是数组中的元素有可能为负数,所以 阅读全文
posted @ 2020-11-02 15:01 lippon 阅读(391) 评论(0) 推荐(0)
摘要:文章目录 程序计数器定义作用特点 Java虚拟机栈定义特点本地方法栈定义 Java堆定义 特点方法区定义特点运行常量池 直接内存总结 Java虚拟机的内存空间分为五个部分: 方法区堆虚拟机栈本地方法栈程序计数器 程序计数器 定义 程序计数器是一个块较小的内存空间,它可以看作是当前线程所执行的字节码的 阅读全文
posted @ 2020-11-02 10:43 lippon 阅读(117) 评论(0) 推荐(0)
摘要:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 链接: leetcode. 解题思路: 首先用暴力的深度优先搜索,然后发现对部分测试用例会超时,所以需要对搜索进行剪枝。一般的剪枝手段都 阅读全文
posted @ 2020-11-01 09:15 lippon 阅读(125) 评论(0) 推荐(0)