上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 34 下一页

2018年4月25日

116.Populating Next Right Pointers in Each Node

摘要: 题目链接 题目大意:对于完全二叉树的每一层,都形成一个单链表(空间复杂度是o(1))。例子如下: 法一:层序遍历。逐层遍历,形成单链表。代码如下(耗时5ms): 1 public void connect(TreeLinkNode root) { 2 if(root == null) { 3 ret 阅读全文

posted @ 2018-04-25 16:12 二十年后20 阅读(176) 评论(0) 推荐(0) 编辑

120.Triangle

摘要: 题目链接 题目大意:给出一个三角矩阵,求解从顶端到底端的最短路径和(空间复杂度最好是o(n))。例子如下: 法一:二维DP。dp[i][j]表示第i行第i列,从下到当前位置的最短路径和。公式:dp[i][j] = Math.min(dp[i+1][j], dp[i+1][j+1])+当前值。从下到上 阅读全文

posted @ 2018-04-25 11:22 二十年后20 阅读(144) 评论(0) 推荐(0) 编辑

124.Binary Tree Maximum Path Sum

摘要: 题目链接 题目大意:找出一个二叉树中的最大路径长度。这个路径是从一个叶子结点到另一个叶子结点的路径长度。例子如下: 法一:DFS。由于是左边一个路径到右边一个路径,经过中间的根连接点,所得到的路径和,所以可以计算每个根节点的左子树和右子树的最大路径和,然后再从中选大者,再与其上一层进行比较。具体代码 阅读全文

posted @ 2018-04-25 10:26 二十年后20 阅读(133) 评论(0) 推荐(0) 编辑

2018年4月24日

实例变量时所导致的线程安全问题

摘要: 当有多个线程共享同一数据时,可能导致数据不一致问题,也就是常见的银行存款取款问题,如果多个线程同时处理某一账户上的钱,则可能导致a取了100,b取了100,而钱只少了100的情况,当然还有更多数据不一致的情况发生。示例代码如下: 运行结果: 由于线程执行的随机性,以及多个线程共享同已数据的特性,导致 阅读全文

posted @ 2018-04-24 21:13 二十年后20 阅读(215) 评论(0) 推荐(0) 编辑

调用start()与run()的区别

摘要: 1.调用start()方法: 通知“线程规划器”当前线程已经准备就绪,等待调用线程对象的run()方法。这个过程就是让系统安排一个时间来调用Thread中的run()方法,使线程得到运行,启动线程,具有异步执行的效果。 调用start()方法,也就是线程状态转变成可运行状态的过程。 2.调用run( 阅读全文

posted @ 2018-04-24 20:44 二十年后20 阅读(1543) 评论(0) 推荐(0) 编辑

实现多线程的两种方式

摘要: 1.继承Thread类。 源码结构:public class Thread implements Runnable 从中可以看出Thread类实现了Runnable,由于java中不支持多继承,所以实现多线程时,可以采用实现Runnable的方式。 2.实现Runnable接口。 注意一下声明与调用 阅读全文

posted @ 2018-04-24 20:33 二十年后20 阅读(114) 评论(0) 推荐(0) 编辑

2018年4月18日

三年。

摘要: “我们不能陪你们一辈子,你们总要学会自己慢慢长大。” “不要哭,不喜欢你哭。” “如果有一天,我跟你妈不能像你外婆外公一样,一起健在,你想要谁陪着你” “还是你妈吧,至少她还可以陪你说说话,我什么也干不了” 这是出事的前一年。依旧记得,那天中午我打电话回去,说下午要学车,我就很快挂了电话,晚上就接到 阅读全文

posted @ 2018-04-18 21:43 二十年后20 阅读(129) 评论(0) 推荐(0) 编辑

2018年4月16日

乐观锁与悲观锁+死锁+所有锁分类

摘要: 乐观锁 VS 悲观锁 1)悲观锁:就是很悲观,每次去拿数据的时候都认为别人会修改, 所以每次在拿数据的时候都会上锁。这样别人想拿这个数据就会 block 直到它拿到锁。传统的关系型数据库就用到了很多这种机制,比如行锁,写锁等,都是在操作之前上锁。 实现:Synchronized, lock 适用于并 阅读全文

posted @ 2018-04-16 20:32 二十年后20 阅读(424) 评论(0) 推荐(0) 编辑

redis线程安全性

摘要: 总体来说快速的原因如下: 1)绝大部分请求是纯粹的内存操作(非常快速) 2)采用单线程,避免了不必要的上下文切换和竞争条件 3)非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io 阅读全文

posted @ 2018-04-16 20:21 二十年后20 阅读(386) 评论(0) 推荐(0) 编辑

同步、异步与阻塞、非阻塞

摘要: 同步阻塞,用户空间的应用程序执行一个系统调用,这意味着应用程序会一直阻塞,直到系统调用完成为止(数据传输完成或者发生错误)。 同步非阻塞,设备以非阻塞形式打开,这意味着 io 操作不会立刻完成,需要应用程序调用多次来等待完成。 同步和异步 1)同步:发出一个调用时,在没有得到结果前,该调用就不返回, 阅读全文

posted @ 2018-04-16 19:34 二十年后20 阅读(107) 评论(0) 推荐(0) 编辑

上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 34 下一页

导航