自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cigar

悟已往之不谏,知来者之可追。

  • 博客(82)
  • 资源 (3)
  • 收藏
  • 关注

原创 图像分割常用评价指标

图像分割常用评价指标最近在做实验的时候,用到了 Dice coefficient 和 F1-score 评价指标,在训练中发现这两个评价指标的结果始终都是一样的,有点疑惑。于是去看原理,最后发现这两个评价指标其实是一样的,于是打算将推理过程记录一下,以便以后加深印象。Dice coefficientDice coefficient 通常用于计算两个样本的相似度,取值范围为 [0, 1]。dice=2∣X∩Y∣∣X∣+∣Y∣dice = \frac{2\left | X \cap Y \right

2021-10-18 15:11:13 6751 2

原创 Windows 下快速删除大量文件的办法

Windows 下快速删除大量文件的办法如果下了git,右键点击git bash。在里面就可以像Linux一样使用rm -rf [dir_name]来删除文件夹。亲测15GB大小,里面几万张图片,1分钟左右就删完了。

2021-03-19 14:11:05 804

原创 Linux设置断网自动关机(蓄电池)

0. 切换rootsu root1. 创建脚本文件在/usr/sbin/下创建TG500.sh,代码如下:#!/bin/shping -c 1 192.168.1.1 > /dev/nullret=$?if [ $ret -eq 0 ]thenecho ' AC Power OK ! 'elseecho ' AC Power maybe off, checking again after 5 minutes ! 'sleep 300/usr/sbin/TG500-2.s

2021-03-14 15:49:57 1592 3

原创 廖雪峰Java学习笔记 — 悲观锁与乐观锁、线程安全集合

1. ReadWriteLock前面说到,ReentrantLock可以替代synchronized实现线程同步,方便我们进行多线程开发。但是在有些场景下ReentrantLock效率比较低,比如论坛上,大多数人都只是阅读(读),发论坛(写)几率比较小。如果使用ReentrantLock,那么一个用户在读的时候,对象就被锁住了,暂时不再允许其他用户读,这样在读的请求量非常高的情形下,效率比较低。ReadWriteLock允许多个线程在没有写入时同时读取(提高性能),但只允许一个线程写入。示例代码如下

2021-03-02 19:20:53 227

原创 廖雪峰Java学习笔记 — 线程协调与ReentrantLock

1. 线程协调前面说到可以使用synchronized关键字来解决线程同步(资源竞争)的问题。但有时线程间还需要协调运行,比如一个线程负责将接收到的任务送入队列,一个线程负责取出队列中的任务,如下:class TaskQueue { private final Queue<String> taskQueue = new LinkedList<>(); public synchronized void addTask(String task) {

2021-03-01 18:41:14 117

原创 廖雪峰Java学习笔记 — 线程同步与死锁

1. 线程同步当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。所以当多个线程任务读写同一变量时,会产生数据不一致的情况。为了解决这个问题,就需要在线程中对该变量进行加锁与解锁来保证数据的一致性。Java程序使用synchronized关键字对一个对象进行加锁:synchronized(lock) { n = n + 1;}注意必须是对同一个对象进行加锁,此外,Java中规定了如下几个原子操作:基本类型的赋值,例如int a = b;引用类型赋值。如果方法中

2021-03-01 14:57:33 162 2

原创 廖雪峰Java学习笔记 — 中断线程与守护线程

1. 中断线程有时线程需要执行长时间的任务,比如下载一个1GB的大文件,但或许由于网速过慢,导致用户点击取消下载,这时就需要中断这个线程。在Java中,只需要在其他线程中对目标线程调用interrupt()方法,然后目标线程反复检测自身状态是否为interrupt状态,如果是,就立即结束。示例代码:public class Main { public static void main(String[] args) throws InterruptedException { T

2021-01-20 17:13:00 190

原创 廖雪峰Java学习笔记 — 多线程1

1. 多线程基础操作系统对CPU采用时间切片的方式轮流让多个任务交替运行,由于每个片的时间很短,所以在人看来,CPU就是在同时进行多个任务。上述中的一个任务实际上就是一个进程,但有时某些进程还需要执行多个子任务,比如在网络编程中,服务器的套接字等待接收客户端的数据时,还要处理其他逻辑,这里的子任务称为线程。一个进程可以包含多个线程,但至少包含一个主线程。一个Java程序实际上就是一个JVM进程,JVM进程用一个主线程来执行main()方法,在main()方法中,又可以创建多个线程。由于Java具有垃

2021-01-18 14:24:31 140

原创 算法小抄学习笔记 — 8.二叉树的遍历

先序遍历void preOrder(TreeNode root) { if (root == null) return; visited(root); // 先序遍历位置 preOrder(root.left); preOrder(root.right);}中序遍历void inOrder(TreeNode root) { if (root == null) return; preOrder(root.left);

2021-01-06 09:51:34 125 1

原创 算法小抄学习笔记 — 7.二叉树的最近公共祖先

1 二叉树递归灵魂三问这个函数应该干什么?函数功能正向逻辑推理base case是啥?得到递归结果后,会做什么?反向逻辑推理下面使用一个题目来示例一下。2 题目2.1 236. 二叉树的最近公共祖先2.1.1 题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,

2021-01-06 09:50:50 1640 1

原创 算法小抄学习笔记 — 6.二叉搜索树(二)

1 二叉搜索树框架TreeNode traverse(TreeNode root, int x) { if (root == null) return null; if (root.val == x) { return root; } if (root.val > x) { return traverse(root.right, x); } if (root.val < x) { return tr

2021-01-06 09:49:24 100 1

原创 算法小抄学习笔记 — 5.二叉搜索树(一)

1 二叉搜索树的定义二叉搜索树(Binary Search Tree)简称BST,对于BST中的每一个节点node:如果左子树的值都比node小。右子树的值都比node大。那么这颗树为二叉搜索树。2 二叉搜索树的性质中序遍历递增,很多二叉搜索树的题目都是基于这一性质来展开的,很重要。void traverse(TreeNode root) { if (root == null) return; traverse(root.left); // 中序遍历代

2021-01-06 09:46:54 117

原创 算法小抄学习笔记 — 4.二叉树递归思想训练(三)

1 如何判断使用先序、中序还是后序遍历仔细思考一个二叉树节点需要做什么的前提条件,然后使用什么遍历就清楚起来了。例如:1.1 226. 翻转二叉树1.1.1 题目翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1要翻转以根节点为树时,需要的前提条件是其左子树内部已经翻转。其右子树内部已经翻转。所以

2021-01-05 22:19:50 124

原创 算法小抄学习笔记 — 3.二叉树序列化与反序列化

1 二叉树的序列化与反序列化二叉树的序列化是指将二叉树转换为唯一标识的字符串,反序列化是指将字符串转换为相应的二叉树。二叉树可以使用先序、中序、后序和层次遍历进行序列化,可以使用先序、后序和层次遍历进行反序列化。(中序遍历不可以反序列化)如何判断两个二叉树相等?可能想法就是遍历二叉树,依次比较节点是否相等,这是没有问题的。但是如何判断子树中是否相等呢?可能就需要将所有子树序列化,加入一个map集合,从而判断所有相等的子树。652 寻找重复的子树,就使用了这个思想,将在下一笔记中总结此题。

2021-01-05 22:18:04 215

原创 算法小抄学习笔记 — 2.二叉树递归思想训练(二)

1 二叉树递归基本思想就是常见的先序、中序和后序遍历框架,如下:/* 二叉树遍历框架 */void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历 traverse(root.right) // 后序遍历}写递归算法的关键是要明确函数的「定义」是什么,然后相信这个定义,利用这个定义推导最终结果,绝不要试图跳入递归。2 构造二叉树构造二叉树的题目,很有可能需要控制左右边界

2021-01-05 22:14:20 104

原创 算法小抄学习笔记 — 1.二叉树递归思想训练(一)

1 二叉树递归基础就是常见的先序、中序和后序遍历框架,如下:/* 二叉树遍历框架 */void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历 traverse(root.right) // 后序遍历}写递归算法的关键是要明确函数的「定义」是什么,然后相信这个定义,利用这个定义推导最终结果,绝不要试图跳入递归。2 快排,归并排序与二叉树遍历的关系2.1 快排就是二叉树的先

2021-01-05 22:13:25 181

原创 算法小抄学习笔记 — 0.链表相关

1. 递归反转整个链表ListNode reverse(ListNode head) { if (head.next == null) return head; ListNode last = reverse(head.next); head.next.next = head; head.next = null; return last;}递归问题主要要认清函数的功能和返回值,不要被嵌套陷进去了。92. 反转链表 II2. 迭代反转整个链表// 反转以

2021-01-05 22:08:40 85

原创 廖雪峰Java学习笔记 — 包装类与JavaBean

1. 自动装箱与拆箱基本类型与包装类直接可以互相转换。int i = 100;Integer n = Integer.valueOf(i);int x = n.intValue();有时,这样可能还会觉得比较麻烦,所以Java编译器为我们提供了自动装箱与自动拆箱。Integer n = 100; // 自动装箱int x = n; // 自动拆箱注意,自动装箱和自动拆箱仅在编译期间就完成,编译器会自动帮我们替换,虚拟机看到如下:Integer n = Integer.valueOf

2021-01-05 22:00:54 200 2

原创 廖雪峰Java学习笔记 — 内部类

1. 内部类在Java中有一种类,被定义在一个类的内部,它被称为内部类(Nested Class)。Java中常见的内部类有三种,Inner Class,Anonymous Class,Static Nested Class。2. Inner Class有如下代码public class Main { public static void main(String[] args) { Outer outer = new Outer("Nested"); // 实例化一个Ou

2021-01-05 21:59:34 117

原创 廖雪峰Java学习笔记 — 继承与多态

1. 继承1.1 super的用法在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super()。下面代码定义了人和学生类的继承关系:class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age;

2021-01-05 21:57:13 127 4

原创 廖雪峰Java学习笔记 — Java异常

1. 异常继承关系从图中可以看出,Throwable是所有异常的根,异常分为如下两大类:Error,比较严重的异常,程序一般对此无力,比如:OutOfMemoryError:内存耗尽。StackOverflowError:栈溢出。Exception,是运行时错误,可以被捕获并处理,Exception分为如下两类:RuntimeException及其子类:通常是逻辑代码编程不对造成的,例如NullPointerException ,IndexOutOfBoundsExcepti

2021-01-05 21:53:15 98

原创 廖雪峰Java学习笔记 — Java日志

1. JDK Logging在调试时,反复增删System.out.println()非常麻烦,日志的目的是为了取代System.out.println()。相比System.out.println(),日志多了一些功能:可以设置输出样式。可以设置输出级别。可以重定向至文件。…在Java标准库中内置了java.util.logging包,但通常一般不用JDK自带的日志包,如下两个日志搭配方案比较流行。Commons Logging和Log4j。SLF4J和Logback。2.

2021-01-05 21:47:31 160

转载 抽象类与接口的联系

1. 抽象类和接口的区别类可以实现无限个接口,但只能从一个抽象类继承。抽象类中可以存在并实现非抽象方法,但接口里面的方法只能是public且没有实现的。抽象类的成员变量可以被不同的修饰符来修饰,但接口的成员变量只能是静态常量(static final)。抽象类是对象的抽象,接口是一种行为规范。2. 抽象类和接口的使用注意事项在继承抽象类时,必须要实现抽象类中所有的抽象方法,且实现的方法必须与抽象方法签名完全一致,这和接口一致。抽象类的非抽象方法具有实际功能时,子类可以不必重写该方法,可

2020-12-23 21:40:24 159

原创 05.02. 二进制数转字符串

原题目面试题 05.02. 二进制数转字符串二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字不在0和1之间,或者无法精确地用32位以内的二进制表示,则打印“ERROR”。示例1: 输入:0.625 输出:"0.101"示例2: 输入:0.1 输出:"ERROR" 提示:0.1无法被二进制准确表示提示:32位包括输出中的"0."这两位。第一次解法二进制小数点后权重依次为0.5, 0.25, 0.125, …

2020-11-17 23:29:59 1047

原创 05.01 插入

原题目面试题 05.01. 插入难度简单20收藏分享切换为英文接收动态反馈插入。给定两个32位的整数N与M,以及表示比特位置的i与j。编写一种方法,将M插入N,使得M从N的第j位开始,到第i位结束。假定从j位到i位足以容纳M,也即若M = 10 011,那么j和i之间至少可容纳5个位。例如,不可能出现j = 3和i = 2的情况,因为第3位和第2位之间放不下M。示例1: 输入:N = 1024(10000000000), M = 19(10011), i = 2, j = 6 输出:N = 11

2020-11-17 22:50:28 147 2

原创 Java常用集合的一些操作方法

Java集合基本概述Java集合实现了接口和实现类相分离,同时支持泛型。在数据结构课上,我们可能对物理结构和逻辑结构有所了解。物理结构:顺序表、链表 …逻辑结构:线性表、队列、栈 …在Java中数据的物理结构对应着实现类,逻辑结构对应着接口。如下图所示黄色框为物理结构,对应着实现类。绿色框为逻辑结构,对应着接口。因为接口的可操作范围较小,所以通常用接口来接管实现类,这样在编译期间就可以避免一些错误,如下:// 我们明确需要使用一个队列 (Java中没有实现顺序队列,因为队列大

2020-11-17 15:32:34 322

原创 04.12 求和路径

原题目面试题 04.12. 求和路径给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4

2020-11-16 23:09:28 169

原创 04.10 检查子树

原题目面试题 04.10. 检查子树检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。示例1: 输入:t1 = [1, 2, 3], t2 = [2] 输出:true示例2: 输入:t1 = [1, null, 2, 4], t2 = [3, 2] 输出:false提

2020-11-16 19:44:23 167

原创 04.06 后继者

原题目面试题 04.06. 后继者设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。示例 1:输入: root = [2,1,3], p = 1 2 / \1 3输出: 2示例 2:输入: root = [5,3,6,2,4,null,null,1], p = 6 5 / \ 3 6 / \ 2 4 / 1输出: null第一遍解

2020-11-10 21:02:32 89

原创 04.05 合法二叉搜索树

原题目面试题 04.05. 合法二叉搜索树实现一个函数,检查一棵二叉树是否为二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。第一遍解法中序遍历二叉搜索树,元素值递增。使用了preVal来保存上一个节点的值,此处假

2020-11-10 19:54:03 127

原创 04.04 检查平衡性

原题目面试题 04.04. 检查平衡性实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \4 4返

2020-11-10 18:52:11 140

原创 04.03 特定深度节点链表

原题目面试题 04.03. 特定深度节点链表给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7 / 8输出:[[1],[2,3],[4,5,7],[8]]第一遍解法BFS,树的层次遍历。在whi

2020-11-09 23:46:41 106 1

原创 04.02 最小高度树

原题目面试题 04.02. 最小高度树给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 第一遍解法题目中告诉数组是有序的,为了求最小高度,所以我们使用中间的元素作

2020-11-09 22:40:37 142

原创 04.01 节点间通路

原题目面试题 04.01. 节点间通路节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1: 输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 输出:true示例2: 输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2, 3], [3, 4]], st

2020-11-09 21:58:58 415

转载 浅析Java中的final关键字

原文地址:(浅析Java中的final关键字)[https://www.cnblogs.com/dolphin0520/p/3736238.html]

2020-11-09 15:53:39 55

原创 02.08 环路检测

原题目面试题 02.08. 环路检测给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tail connects to node index

2020-11-07 21:33:27 149

原创 02.07 链表相交

原题目面试题 02.07. 链表相交给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8

2020-11-07 20:22:58 170

原创 02.06 回文链表

原题目面试题 02.06. 回文链表编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false 示例 2:输入: 1->2->2->1输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?第一遍解法回文数正序与倒数一样,所以想到了头插法逆序的性质。使用头插法创建一个新的链表,因与原链表逆序。从头至尾,依次比较两个链表,若全相等,则认为是回文链表。class Solution {pub

2020-11-03 23:17:25 102

原创 02.05 链表求和

原题目面试题 02.05. 链表求和给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912**进阶:**思考一下,假设这些数位是正向存放的,又该如何解决呢?示例:输入:(6 -> 1 -> 7) + (2 -> 9 -

2020-11-03 21:52:32 123

原创 02.04 分割链表

原题目面试题 02.04. 分割链表编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8第一遍解法创建一个新链表,遍历

2020-10-31 10:09:07 114

VC++6.0 win10

VC6.0 能够在 XP 下很好的运行,但是在win10下直接安装有时候还存在一些问题,该软件能够在win10上直接安装VC6.0并且正常运行,无需任何兼容性设置,亲测可用,欢迎各位下载。

2019-02-20

基于MFC的TCP调试助手源码

自己用VS2010做的一个小工具,可以方便调试网络应用程序,同时支持TCP和UDP通信,能够发送16进制和显示16进制,该资源包含源码,可以方便大家学习与修改其中的不足。

2017-07-26

基于MFC vs2010做的TCP调试助手

基于MFC vs2010做的一款TCP调试助手,可以支持TCP和UDP通信,实现了多线程操作,同时也支持定时发送,是网络通信调试的一款好工具。

2017-07-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除