自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

原创 计算机网络 —— 文章目录

个人文章内容速查1.计算机网络概述1.计算机网络基本概念1.1计算机网络1.2什么是Internet从组成细节上看从服务的角度1.3网络协议2.计算机网络结构2.1计算机网络结构2.2Internet结构3.网络核心3.1电路交换3.2多路复用3.3报文与分组交换4.计算机网络性能5.计算机网络体系结构5.1体系结构概述5.2OSI参考模型5.3TCP/IP参考模型5.4 5层参考模型原文直达:计算机网络概述2.网络层 Ⅰ1.

2020-06-28 08:39:37 384

原创 sleep以及如何正确终止线程

如果线程被中断,即中断状态为true,则 interrupted() 方法会返回true,并且会将中断状态重置为false。如果线程没有被中断,即中断状态为false,则 interrupted() 方法会返回false。比如在调用 interrupt() 的时候,其实就是想尽快地结束线程,所以,继续的 sleep 是没有意义的,应该尽快结束。这个方法原本是设计用来停止线程并抛出线程死亡的异常,但是实际上它是不安全的,因为它是直接终止线程解放锁,这很难正确地抛出线程死亡的异常进行处理。

2023-08-15 16:56:39 368 1

原创 Lambda 局部变量 final

需要注意的是,如果你在 Lambda 表达式中引用的变量是一个对象,那么变量本身的状态仍然可以改变,只是不能将其重新赋值为另一个对象。例如,如果你在 Lambda 表达式中引用了一个 ArrayList 对象,那么你仍然可以向该对象中添加或删除元素,但是不能将其重新赋值为另一个 ArrayList 对象。,并在需要时创建一个实现该函数的对象。Lambda 表达式可以让代码更加简洁和易读,但是在使用 Lambda 表达式时,需要注意局部变量必须是 final 或 effectively final。

2023-06-23 22:53:20 274

原创 Java知识补充

Java笔记复习

2023-03-03 16:47:02 522

原创 docker搭建hadoop集群 个人总结

按照这两篇文章即可,总结来说 pull ubuntu,进入系统,配置java、hadoop,保存镜像。然后根据这个镜像启动三个容器master,slave1,slave2,在master上配置相关信息。把程序在本地打成jar包,传到容器内(ubuntu)(docker cp 命令)。把数据上传到容器内,再上传到 hdfs 上。使用 docker 进行端口映射 8808 和 50070,即可在启动集群后在本地浏览器访问。,需要重新配置一遍或者在网上找方法去固定ip。

2022-11-20 17:54:06 985

原创 L2正则化

口语表述:模型过拟合了,也就是说训练出来的函数太复杂了。而衡量一个函数的复杂度可以通过函数与零的距离。如何衡量函数与零的距离?一种简单的方法是是通过线性函数中的权重向量的某个范数来度量其复杂性,而最常用的就是L2范数。将其范数作为另一个惩罚项加到最小化损失的问题中,将原来的训练目标调整为最小化预测损失和惩罚项之和使用平方范数而不是标准范数是为了便于计算导数1/2 是为了求导后简洁正则化常数 λ (非负)来描述两个惩罚项的权衡L2正则化也称为权重衰减,是因为 L2 正则化回归的小批

2022-01-26 15:14:04 1982

原创 Redis 学习笔记(二)

Jedis 连接 Redis这个地方我弄了一天才搞定,在网上找了各种解决办法,当时真的有点崩溃通过 Win 上的 idea 连接虚拟机中的 redis 服务:一、配置文件里的几个地方必须修改:bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问protected-mode no #默认yes,开启保护模式,限制为本地访问二、以配置文件形式启动 redis 服务三、虚拟机的防火墙必须关闭或者打开防火墙但开放 6379 端口Ubuntu 关闭防火墙:四、

2020-12-21 19:59:09 132

原创 Redis 学习笔记(一)

实验环境: Ubuntu 虚拟机 + Docker下载并启动 Redis切换到 root 用户su -下载 redis 镜像(默认为最新版本)docker pull redis查看下载下来的镜像docker image运行容器(-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务)docker run -itd --name myredis -p 6379:6379 redisredis

2020-12-21 19:27:06 117

原创 leetcode 204 计数质数(埃氏筛)

题目:返回小于 n 的质数的个数暴力class Solution { public int countPrimes(int n) { int ans = 0; for (int i = 2; i < n; ++i) { ans += isPrime(i) ? 1 : 0; } return ans; } public boolean isPrime(int x) { f

2020-12-03 17:08:37 98

原创 华科《编译原理》考试复习

华科编译原理考试题目大题(亲测)根据要求自己写出文法根据给定文法写出正规式判断文法的二义性根据给定代码写出四元式LL(1)文法的判定程序流图、基本块、回边、循环LR(0)文法判定、SLR文法判定及分析表、给定字符串写出分析过程小题(自己复习时总结的)计算机高级语言一般都有关键字、标识符、常数、运算符 和定界符这5类单词基于生成观点、计算观点和识别观点,分别形成了正规文法、 正规式和有穷自动机 3种用于描述计算机高级语言词法的工具。一个正规语言可能对应多个正规文法(√)

2020-11-19 20:44:44 1035

原创 LeetCode 337. 打家劫舍 III (二叉树的动态规划)

打家劫舍一(前后相邻不能同时取) public int rob(int[] nums) { if(nums == null || nums.length == 0) return 0; if(nums.length == 1) return nums[0]; if(nums.length == 2) return Math.max(nums[0],nums[1]); int length = nums.length;

2020-10-17 17:44:22 255

原创 Docker 学习笔记

安装 DockerLinux 系统内核版本需要高于 3.10,并且系统是64位,才可以体验 Docker通过 uname -ir 查看信息获取最新的 docker 安装包wget -qO- https://get.docker.com/ | sh输入密码后就会下载脚本并安装Docker及依赖包安装完成:启动docker 后台服务启动守护进程sudo service docker start输入以下指令能看见版本号,说明 docker 安装成功!docker -v关闭

2020-10-15 16:08:58 77

原创 CPU密集型 and IO密集型

CPU密集型(CPU-bound)CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下的程序,在执行的过程当中绝大部份时间用在三角函数和开根号的计算,便是属于CPU bound

2020-10-12 21:27:58 219

原创 LeetCode 501. 二叉搜索树中的众数(Morris中序遍历)

Morris 中序遍历用 Morris 中序遍历的方法把中序遍历的空间复杂度优化到 O(1)Morris 中序遍历的一个重要步骤就是寻找当前节点的前驱节点,并且 Morris 中序遍历寻找下一个点始终是通过转移到 \rm rightright 指针指向的位置来完成的。如果当前节点没有左子树,则遍历这个点,然后跳转到当前节点的右子树。如果当前节点有左子树,那么它的前驱节点一定在左子树上,我们可以在左子树上一直向右行走,找到当前点的前驱节点。如果前驱节点没有右子树,就将前驱节点的 rig.

2020-09-25 15:06:09 131

原创 LeetCode 排列组合子集问题(回溯 + 剪枝)

46. 全排列(中等)class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> list = new ArrayList<>(); if(nums == null || nums.length == 0){ return list; }

2020-09-13 16:33:22 129

原创 LeetCode 环形链表Ⅰ、Ⅱ(快慢指针)

环形链表Ⅰ:判断是否有环环形链表Ⅱ:找到第一个入环结点方法:快慢指针思路慢指针走了 n 步,达到入环结点,准备入环;此时快指针已在环内走了 n 步(假设环的长度大于 n);此时快指针距离入环结点还有 b 步远慢指针又走了 b 步;此时快指针走了 2b 步,与慢指针相遇;此时两指针距离入环结点有 n 步远问题一二都可以解决了 //问题一 public boolean hasCycle(ListNode head) { if (head == null || head.ne

2020-09-05 17:05:13 89

原创 LeetCode 836. 矩形重叠

注:坐标系y轴是向上的自己想到的 public boolean isRectangleOverlap(int[] rec1, int[] rec2) { int x1 = rec1[0], x2 = rec1[2], x3 = rec2[0], x4 = rec2[2]; int y1 = rec1[1], y2 = rec1[3], y3 = rec2[1], y4 = rec2[3]; boolean one = (x2>x3 &&a.

2020-08-26 11:54:07 84

原创 LeetCode 面试题 01.01. 判定字符是否唯一

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = “leetcode”输出: false限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。Set public boolean isUnique(String astr) { Set set = new HashSet(); for (int i = 0; i <astr.length() ; i++) {

2020-08-26 11:01:13 126

原创 LeetCode 496. 下一个更大元素 I (单调栈)

单调栈(官方题解)先忽略数组 nums1,先对将 nums2 中的每一个元素,求出其下一个更大的元素。将这些答案放入哈希映射(HashMap)中,再遍历数组 nums1,并直接找出答案。首先把第一个元素 nums2[1] 放入栈,随后对于第二个元素 nums2[2],如果 nums2[2] > nums2[1],那么我们就找到了 nums2[1] 的下一个更大元素 nums2[2],此时就可以把 nums2[1] 出栈并把 nums2[2] 入栈;如果 nums2[2] <=.

2020-08-24 15:51:46 120

原创 LeetCode 201. 数字范围按位与

给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4朴素从 m 与 到 n,超出时间限制(m=0,n=21474…)规律可以将问题重新表述为:给定两个整数,我们要找到它们对应的二进制字符串的公共前缀简单的证明:假设对于所有这些二进制串,前 i 位均相同,第 i+1 位开始不同,由于 [m,n] 连续,所以第 i+1 位在 [m,n] 的数字范围从小到

2020-08-23 09:17:53 135

原创 Java 基础与语法(二)

getDeclaredFields()与getFields()getDeclaredFields(): 获取所有本类自己声明的属性, 不能获取父类和实现的接口中的属性getFields(): 只能获取所有 public 声明的属性, 包括获取父类和实现的接口中的属性下面两段代码的区别是?short s1 = 1; s1 = s1 + 1;short s1 = 1; s1 += 1;第一段编译报错,s1 + 1自动升级为 int 型,int 型赋值给 s1,需要手动强转第二段隐含类型强转,

2020-08-22 22:15:59 93

原创 LeetCode 258. 各位相加(模 9)

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?常规以下解法太尝龟了: public int addDigits(int num) { while(num>=10){ num=num/10+num%10; }

2020-08-20 09:25:41 263

原创 int 转 String 的方法效率对比

在写 leetcode 的题目时,需要将 int 型的 val 转换为 String 型。自己图方便,直接使用的path += root.val; 。提交后执行用时 11ms,但对比答案后发现答案使用的是path +=String.valueOf(root.val);,把自己的代码仅将path += root.val;改成path +=String.valueOf(root.val);后发现执行用时变为了 2ms !!!击败了 95% 的用户。总结加分析一下,int 类型转 String 类型有以下三种

2020-08-19 10:24:47 766

原创 LeetCode 189. 旋转数组

暴力旋转 k 次 public void rotate(int[] nums, int k) { int temp, previous; for (int i = 0; i < k; i++) { previous = nums[nums.length - 1]; //每次取出最后一个元素 for (int j = 0; j < nums.length; j++) { tem.

2020-08-18 17:22:23 92

原创 ArrayList 迭代器 产生 ConcurrentModificationException 异常

之前学习 fail-fast 时了解了 ArrayList 里的一些方法和成员变量:fail-fast(快速失败)机制hasNext 方法补充 ArrayList 的内部类private class Itr implements Iterator<E> 的 hasNext 方法:产生异常在下面一段代码中会报出异常 ConcurrentModificationException原因:集合每次调用 add 方法时,modCount 都会自增(4)在获取迭代器的时候,会把 mod

2020-08-17 17:29:02 308

原创 LeetCode 1365. 有多少小于当前数字的数字

提示:2 <= nums.length <= 5000 <= nums[i] <= 100暴力法,双循环class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { if(nums != null && nums.length > 0){ int[] ans = new int[nums.length]; //记录答案的数.

2020-08-16 17:27:30 86

原创 Java 基础与语法(一)

JDK和JREJRE:Java Runtime Environment( java 运行时环境)。即java程序的运行时环境,包含了 java 虚拟机,java基础类库。JDK:Java Development Kit( java 开发工具包)。即java语言编写的程序所需的开发工具包。JDK 包含了 JRE,同时还包括 java 源码的编译器 javac、监控工具 jconsole、分析工具 jvisualvm等。== 和 equals值不同,使用 == 和 equals() 比较都返回 f

2020-08-16 16:11:58 105

原创 LeetCode 66. 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。巧解 public int[] plusOne(int[] digits) { for(int i=digits.length-1; i>=0; i--){ digits[i]+

2020-08-13 20:11:52 64

原创 fail-fast(快速失败)机制

笔记摘自公众号愚公要移山 !!!简介在系统设计中,快速失效系统一种可以立即报告任何可能表明故障的情况的系统。快速失效系统通常设计用于停止正常操作,而不是试图继续可能存在缺陷的过程。这种设计通常会在操作中的多个点检查系统的状态,因此可以及早检测到任何故障。快速失败模块的职责是检测错误,然后让系统的下一个最高级别处理错误。—— 维基百科fail-fast 机制是 Java 集合(Collection) 中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生 fail-fast 事件。演示

2020-08-13 11:20:38 1484

原创 Arrays.asList() 使用指南

笔记总结自公众号 JavaGuide,感谢Guide哥!简介Arrays.asList() 可以将一个数组转化为一个 List 集合 String[] arr = {"aaa","bbb"}; List<String> list = Arrays.asList(arr); //上面两行等价于下面一条语句 List<String> list1 = Arrays.asList("aaa", "bbb");JDK 源码: public st

2020-08-10 17:38:59 295

原创 二分查找小结

数据结构课程就有学习到二分法的思想和实现,但自己的动手实践太少,用二分法解题的练习也很少,但直到前段时间真正动手用二分法解题的时候才发现二分法里面的细节很多,边界条件很难把握,用 < 还是<= ,return left 还是 return right分不清。二分查找的一些细节:不要出现 else,而是把所有情况用 else if 写清楚,这样可以清楚地展现所有细节。计算 mid 时需要防止溢出,代码中 使用left + (right - left) / 2来代替 (left + r

2020-08-05 10:22:40 113

原创 LeetCode 461. 汉明距离 (布赖恩·克尼根算法)

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。内置位计数功能class Solution { public int hammingDistance(int x, int y) { return Integer.bitCount(x ^ y); }}逐个移位class Solution { public int hammingDistance(int x, int y) { in

2020-08-01 14:59:22 259

原创 LeetCode 448. 找到所有数组中消失的数字

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入: [4,3,2,7,8,2,3,1]输出: [5,6]暴力(有点shadiao)class Solution { public List<Integer> findDisa

2020-08-01 12:51:25 114

原创 Java 8 & 9 & 10 & 11 新特性

Java 81. Lambda 表达式Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。实质可以理解为函数式接口(只有一个抽象方法的接口)的实例2. 函数式接口只包含一个抽象方法的接口,成为函数式接口可以通过 Lambda 表达式创建该接口的对象可以在接口上使用 @FunctionalInterface注解,检查是否是一个函数式接

2020-07-31 10:55:35 670

原创 深入理解Java虚拟机——Java语法糖

1. 泛型与类型擦除泛型是 JDK 1.5 的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、 接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。泛型技术在 C# 和 Java 之中的使用方式看似相同,但实现上却有着根本性的分歧C# 里面泛型无论在程序源码中、编译后的 IL 中(Intermediate Language,中间语言,这时候泛型是一个占位符)还是运行期的 CLR 中都是切实存在的

2020-07-29 10:46:36 138

原创 深入理解Java虚拟机——方法调用

前言:方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(直接引用)这个特性给Java带来了更强大的动态扩展能力1.解析所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用这种解

2020-07-20 16:27:00 202

原创 深入理解Java虚拟机——主动引用 or 被动引用 ?

1.类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括了:加载 —— 验证 —— 准备 —— 解析 —— 初始化 —— 使用 —— 卸载2.初始化的时机?什么时候进行类的加载,虚拟机规范里面并没有强制约束。但是对于初始化阶段,虚拟机规范严格规定了有且只有四种情况必须对类进行初始化(加载、验证、准备自然要在此之前开始):1、遇到 new、putstatic、getstatic、invokestatic 这四条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化

2020-07-19 20:27:18 185 1

原创 Queue中 的方法的区别

offer,add一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。poll,removeremove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似,但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此..

2020-07-19 14:42:32 175

原创 Shiro

笔记整理自 b站 楠哥教你学Java1. 什么是 ShiroShiro 是一款主流的 Java 安全框架,不依赖任何容器,可以运行在 Java SE 和Java EE 项目中主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作总之,Shiro 就是用来解决安全管理的系统化框架2. Shiro 核心组件UsernamePasswordToken :Shiro 用来封装用户登录信息,使用用户登录信息来创建令牌 TokenSecurityManager :Shiro 的核心部分,

2020-07-18 14:58:54 106

原创 深入理解Java虚拟机——垃圾收集器

程序计数器、虚拟机栈、本地方法栈三个区域随 线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定 性,在这几个区域内不需要过多考虑回收的问题Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有 在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存1. 对象已死?堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆进行回收前,第一 件事情就是要确定这些..

2020-07-17 11:45:31 128

空空如也

空空如也

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

TA关注的人

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