摘要:题目链接 题目大意:与116题类似,区别是这题的二叉树是普通二叉树,而不是完全二叉树。要求空间复杂度o(1)。例子如下: 法一:直接用116题的层序遍历的办法。代码如下(耗时5ms): 1 public void connect(TreeLinkNode root) { 2 if(root == n
阅读全文
摘要:先看第一个例子: 运行结果如下: 解析构造函数部分: 由于构造函数是被main主线程调用的,所以这里的Thread.currentThread()返回的是主线程main。其实就是表明Thread.currentThread()表示当前代码段正在被谁调用。 而this就是只当前线程myThread。至
阅读全文
摘要:题目链接 题目大意:对于完全二叉树的每一层,都形成一个单链表(空间复杂度是o(1))。例子如下: 法一:层序遍历。逐层遍历,形成单链表。代码如下(耗时5ms): 1 public void connect(TreeLinkNode root) { 2 if(root == null) { 3 ret
阅读全文
摘要:题目链接 题目大意:给出一个三角矩阵,求解从顶端到底端的最短路径和(空间复杂度最好是o(n))。例子如下: 法一:二维DP。dp[i][j]表示第i行第i列,从下到当前位置的最短路径和。公式:dp[i][j] = Math.min(dp[i+1][j], dp[i+1][j+1])+当前值。从下到上
阅读全文
摘要:题目链接 题目大意:找出一个二叉树中的最大路径长度。这个路径是从一个叶子结点到另一个叶子结点的路径长度。例子如下: 法一:DFS。由于是左边一个路径到右边一个路径,经过中间的根连接点,所得到的路径和,所以可以计算每个根节点的左子树和右子树的最大路径和,然后再从中选大者,再与其上一层进行比较。具体代码
阅读全文
摘要:当有多个线程共享同一数据时,可能导致数据不一致问题,也就是常见的银行存款取款问题,如果多个线程同时处理某一账户上的钱,则可能导致a取了100,b取了100,而钱只少了100的情况,当然还有更多数据不一致的情况发生。示例代码如下: 运行结果: 由于线程执行的随机性,以及多个线程共享同已数据的特性,导致
阅读全文
摘要:1.调用start()方法: 通知“线程规划器”当前线程已经准备就绪,等待调用线程对象的run()方法。这个过程就是让系统安排一个时间来调用Thread中的run()方法,使线程得到运行,启动线程,具有异步执行的效果。 调用start()方法,也就是线程状态转变成可运行状态的过程。 2.调用run(
阅读全文
摘要:1.继承Thread类。 源码结构:public class Thread implements Runnable 从中可以看出Thread类实现了Runnable,由于java中不支持多继承,所以实现多线程时,可以采用实现Runnable的方式。 2.实现Runnable接口。 注意一下声明与调用
阅读全文
摘要:“我们不能陪你们一辈子,你们总要学会自己慢慢长大。” “不要哭,不喜欢你哭。” “如果有一天,我跟你妈不能像你外婆外公一样,一起健在,你想要谁陪着你” “还是你妈吧,至少她还可以陪你说说话,我什么也干不了” 这是出事的前一年。依旧记得,那天中午我打电话回去,说下午要学车,我就很快挂了电话,晚上就接到
阅读全文
摘要:乐观锁 VS 悲观锁 1)悲观锁:就是很悲观,每次去拿数据的时候都认为别人会修改, 所以每次在拿数据的时候都会上锁。这样别人想拿这个数据就会 block 直到它拿到锁。传统的关系型数据库就用到了很多这种机制,比如行锁,写锁等,都是在操作之前上锁。 实现:Synchronized, lock 适用于并
阅读全文
摘要:总体来说快速的原因如下: 1)绝大部分请求是纯粹的内存操作(非常快速) 2)采用单线程,避免了不必要的上下文切换和竞争条件 3)非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io
阅读全文
摘要:同步阻塞,用户空间的应用程序执行一个系统调用,这意味着应用程序会一直阻塞,直到系统调用完成为止(数据传输完成或者发生错误)。 同步非阻塞,设备以非阻塞形式打开,这意味着 io 操作不会立刻完成,需要应用程序调用多次来等待完成。 同步和异步 1)同步:发出一个调用时,在没有得到结果前,该调用就不返回,
阅读全文
摘要:Memcached:是高性能分布式内存缓存服务器,本质是一个内存 key-value 数据库,但不支持数据持久化,服务器关闭后,数据全丢失。只支持 key-value 结构。 Redis:将大部分数据放在内存中,支持的数据类型有:字符串、hash 表、链表、集合、有序集合以及基于这些数据类型的相关操
阅读全文
摘要:Tcp 保活功能,主要为服务器应用程序提供,服务器应用程序需要知道客户主机是否崩溃,从而可以代表客户使用资源. 如果一个给定的连接,在两个小时内没有任何的动作,则服务器就向客户发送一个探测报文段,客户主机可能有以下几种状态:1)客户主机依然正常运行,并从服务器可达,客户的 tcp 响应正常,而服务器
阅读全文
摘要:Java8 新特性: 1)接口的默认方法,java 8 允许我们给接口添加一个非抽象方法,只需使用 default 关键字,JDK1.8之前默认是用protected修饰,但在JDK1.8之后则是默认为default修饰。 2)lambda 表达式,在 java8 之前,若想将行为传入函数,仅有的选
阅读全文
摘要:线程:并发性好、资源消耗少;资源管理和保护不太适合,因为资源是共享的。 进程:方便资源管理和回收;并发性不如线程,资源消耗大。 线程:cpu 调度基本单位。比进程更小的独立运行单位,同一进程中可有多个线程并发执行。 进程:cpu 分配资源基本单位。 并行:两个或多个事件,在同一时刻发生。 并发:两个
阅读全文
摘要:容易面试问到。 https://www.cnblogs.com/interdrp/p/7041279.html
阅读全文
摘要:1. 开放定址法 开放定址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。 Hi = (H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列。di可有下列三种取法:
阅读全文
摘要:题目链接 题目大意:给出一个字符串,判断去除特殊字符和空格后的字符串(只包括字母和数字)是否是回文串。 法一:用辅助数组记录去除了特殊字符和空格后的字符串,然后针对这个辅助数组判断是否是回文串。o(n)。代码如下(耗时9ms): 1 public boolean isPalindrome(Strin
阅读全文
摘要:题目链接 题目大意:给出一个数组,找出其中连续数值最多的长度。例子如下: 法一:o(nlgn)。先排序,然后遍历一遍,查找连续数值,一旦不连续,则更新ma。代码如下(耗时1ms): 1 public int longestConsecutive(int[] nums) { 2 if(nums.len
阅读全文
摘要:题目链接 题目大意:给出一个二叉树,从根节点到叶的路径上的数值组成一个int型的数值,将所有路径上的所有数值相加得到最总和。例子如下: 法一:DFS。从根节点到叶节点,在路径上每到达一个节点,则计算出其值,然后DFS进去即可。代码如下(耗时1ms): 1 public int sumNumbers(
阅读全文
摘要:题目链接 题目大意:给出一个字符串,对其进行划分,形成所有子串是回文串,找出最小需要划分的次数。比如字符串"aab",最小的划分次数是1,形成"aa","b",都是回文串。 法一:利用131题的DFS,超时。代码如下: 1 private static int dfs(String s, int r
阅读全文
摘要:题目链接 题目大意:给出一个字符串,将其划分,使每个子串都是回文串,计算处所有可能的划分情况。 法一(借鉴):很明显的,是要用DFS。这个可以作为一个模板吧,就是划分字符串的所有子串的一个模板。代码如下(耗时9ms): 1 public List<List<String>> partition(St
阅读全文
摘要:题目链接 题目大意:一个circle圆环,第i个位置,有汽油gas[i],而汽车从i到i+1,需要汽油cost[i]。求解,从哪个位置开始,汽车能走完圆环。如果走不完则返回-1,能走完则返回index。例子如下: 法一:两个for循环。直接求解每个可能的起始位置,然后计算能否在有汽油的情况下,走完全
阅读全文
摘要:原题链接 题目大意:给出一串字符串,只允许且必须交换一次,让其成为合法的括号匹配的字符串。 法一(借鉴):这里交换,换成直接改变,到最后再做处理即可。用flag标记字符串是否合法。遇到'(',则压栈;遇到')',栈非空则退栈,栈空则标记flag为非法,且变为'(',然后压栈。最后判断:如果flag标
阅读全文
摘要:题目大意:给出一个数,将其分解成一个偶数和一个奇数的乘积。如果不能分解,则输出No。 输入: t(下面有t行数据) n(范围是2~2^63) 例子: 2 10 5 输出: 对于每个数据,输出其偶数和奇数(如果有多组,输出偶数最小的那组,输出格式:奇数 偶数),否则输出No。 例子: 5 2 No 法
阅读全文
摘要:题目链接 题目大意:分糖果,每个小朋友都有一个ratings值,且每个小朋友至少都要有一个糖果,而且每个小朋友的ratings值如果比左右邻舍的小朋友的ratings值高,则其糖果数量也比邻舍的小朋友多。 法一:超时。按照要求,从前往后比较每个小朋友的ratings值,如果后一个小朋友的rating
阅读全文
摘要:题目链接 题目大意:对链表进行插入排序。 解法:直接插入排序。代码如下(耗时40ms): 1 public ListNode insertionSortList(ListNode head) { 2 ListNode first = new ListNode(0); 3 ListNode pre =
阅读全文
摘要:题目链接 题目大意:对链表进行排序,要求时间复杂度是o(nlgn)。 法一:冒泡,不交换结点,而交换结点中的数值。超时了。代码如下: 1 public ListNode sortList(ListNode head) { 2 if(head == null || head.next == null)
阅读全文
摘要:题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,siz
阅读全文