自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GoLand一键上传项目到远程服务器

我们开发项目常常将项目上传到linux远程服务器上来运行,查看日志等等,每次连接终端输入命令上传文件总是很烦,最近正好在学go开发项目,用到了goland,整理一下我的配置的步骤分享一下一、tools->deployment->configuration二、弹出框点击左上角+号,选择SFTP,弹出框输入一个名字就好了三、填入ssh configuration,这个就是你用ssh连接的linux的那个名字例如:zhangsan@10.123.123.13然后

2022-05-10 21:36:45 1067

原创 mac或者linux下载配置oh my zsh

mac高版本的系统终端已经默认shell类型为zsh我们可以下载oh my zsh改善我们的视觉以及丰富的插件功能提高效率前提:我默认你的终端是zsh类型的shell1.下载 oh my zsh,终端输入:sudo wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh下载完后执行一个命令 zsh 我们就可以看到变化了,使用了一款默认的主题2.下载语法高亮插件gi

2022-04-30 20:26:34 1506

原创 ssh配置免密登陆linux远程服务器

一、配置公私钥:1.在自己本地执行命令:ssh-keygen这样在本地的家目录的.ssh文件夹下生成了id_rsa(私钥)和id_rsa_pub(公钥)2.然后执行命令:ssh-copy-id -i ~/.ssh/id_rsa.pub(你的公钥的位置)root@xxxxxxxxroot是你远程服务器的用户登录名,xxxxxx是ip地址,这就将你的公钥匙上传到了服务器的家目录下的.ssh文件夹下的authorized_keys这个文件中。3.这时候你直接 执行..

2022-04-29 23:29:08 1764

原创 MacOS 终端中创建问题遇到mkdir: /xxx: Read-only file system

在终端使用mkdir创建文件夹的时候遇到了这个问题,查资料发现是因为mac启动了系统完整性保护。也找到了相应的解决方法。但是发现还有更简单的问题背景:mkdir /test 我要创建一个test文件夹就会出现这个提示mkdir: /test: Read-only file system可以把/test改成 test就行了下面给出查到的方法1.重新启动mac,按Command+R 转到macOS实用程序窗口2.单击顶部菜单栏的菜单项 Utilities ->Terminal

2022-04-29 00:10:29 11222 1

原创 跳盒子,奇数编号盒子可以跳1或2下,偶数编号盒子可以跳1或3下

题目描述:给定m个盒子,将所有的盒子从1到m进行编号,一只青蛙从编号为1的盒子中开始跳,问跳到m个盒子共有多少种跳法输入示例:3输出示例:2输入实例:7输出示例:12递归直接解决: private static int sum = 0; public static void main(String[] args) { int m = 3; hand(7,1); System.out.println(sum.

2022-03-12 21:16:38 560

原创 LeetCode剑指 Offer 32 - III. 从上到下打印二叉树 III

这道题比较中规中矩,就是一个BFS,不过有一个每一层输出顺序的问题(第一层从左到右打印,第二层从右到左打印)看代码:public static List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> list = new ArrayList<>(); if (root == null){//根节点空,返回空的list就好了...

2022-02-16 10:23:13 368

原创 LeetCode146. LRU 缓存

LRU全称Least Recently Used,表示最近最少使用,第一次听到这个概念是在大三的操作系统课程里面,用于页面置换算法,为虚拟页式存储管理服务。LRU算法的提出基于一个事实,在前面几条指令中使用频繁的页面很可能在接下来的几条指令中也会频繁使用,反过来很久没有使用过的那就认为接下来也不会使用,这就是局部性原理现在LRU算法也经常用作缓存淘汰策略。LeetCode146. LRU 缓存就是这样一道题,据说这也是面试常考的一个点其实如果了解了原理用对了方法就不难了很明显这个缓.

2022-02-13 19:18:06 548

原创 用java实现一个非常简单的布隆过滤器

在查redis缓存之前往往先经过布隆过滤器,达到防止缓存穿透的作用布隆过滤器原理以及优缺点可以看博客布隆过滤器的原理,优缺点_m0_53611007的博客-CSDN博客_布隆过滤器的优缺点看代码:/** * @author:yuze * @description:我的极简布隆过滤器 * @data:2022/2/13 */public class MyBloomFilter { private int[] bloomFilter = new int[1024];//存放.

2022-02-13 17:57:51 834

原创 java对象的创建过程

java语言中我们通过new关键字来创建对象,而这仅仅是语言层面的创建对象,对象创建的原理是怎么样的呢?我们从jvm的角度分析一下对象创建的过程。对象的创建大概分为以下几步:1:通过new关键字定义一个引用符号2:JVM首先对符号引用进行解析检查类是否已经被加载;3:为对象分配内存空间;4:为对象字段设置零值;5:设置对象头;6:执行构造方法;1. 通过new关键字定义一个引用符号通过new关键字定义一个引用符号,这个符号引用时判断类是否被加载的关键2.引用符

2022-02-13 11:56:07 3430

原创 ConcurrentHashMap 浅析

一、ConcurrentHashMap 1.7ConcurrentHashMap作为线程安全的HashMap不管是面试率还是使用率都是很高的,那么ConcurrentHashMap是怎样的结构以及源代码如何实现的呢?我们先从ConcurrentHashMap1.7开始分析1.存储结构Java 7 中 ConcurrentHashMap 的存储结构如上图,ConcurrnetHashMap 由很多个 Segment 组合,如果你了解 HashMap 的源码结构会发现每一个 Segme.

2022-02-11 21:17:24 1071

原创 AQS原理浅析

听过很多人在面试的时候会问到并发知识,很多时候经常会问"请你说一下自己对于AQS原理的理解",AQS全称AbstractQueuedSynchronizer ,是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非..

2022-02-10 20:22:19 163

原创 java中try、catch、finally中带有return

我们知道在异常处理中try、catch、finally是按顺序执行的,就是如果try中没有异常,顺序为try→finally,如果try中有异常,则顺序为try→catch→finally。但是当try、catch、finally中加入return之后,就会有几种不同的情况出现,下面分别来看一下。为什么写这篇博客呢?因为今天刷抖音刷到了这道题,发现评论区很多人都错了,我们来看一下原题:public static int return1(){ int a = 1; t

2022-02-03 12:43:10 7536 3

原创 死锁demo分析

在学操作系统课程的时候第一次接触到死锁的概念死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。在看java并发编程这本书的时候又看到了一个死锁的例子很好的例子分享一下public class DeadLockDemo { private static String A = "A"; private static Str

2022-01-29 00:24:36 193

原创 java锁机制小总结

马上春招了,总结一下锁机制,看了好多博客学到了很多,自己在总结一下我们常常听到的锁相关名词有一下几种公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁下面一 一展开概念解释一、 公平锁/非公平锁1.公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会出现线程饿死在队列中。缺点:吞吐量会下降很多,永远先获得资源的都是

2022-01-25 19:48:01 202

原创 java代理模式

代理模式是指,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。  百度百科《代理模式》也就是说使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑。客户类真正的想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。客户类对目标对象的访问是通过访问代理对象来实现的。当然,代理类与目标类要实现同一个接口。例如,有三各类,A,B,C,原本A可以直接访问C,但是因为一些原..

2022-01-24 18:36:27 472

原创 java中的String为什么是不可变的

我们都知道在java中String是不可变的那么什么叫不可变?百度百科给出:在面向对象及函数编程y语言中,不可变对象是一种对象,在被创造之后,它的状态就不可以被改变。我们可理解为:一个对象创建完成之后,它的状态就不能再改变,包括的对象里面的成员变量,基本数据类型的值都不能改变,这样就叫做不可变对象理解定义不叫简单,但是实际情况下我们总会混淆引用与对象,进而以为String可变,比如下面代码: String s = "abc"; System.out

2022-01-24 16:13:00 1254

原创 leetcode22.括号生成

刚拿到这个题没有头绪,感觉好难啊(自己做题少,经验少)我就死看答案,啥也看不懂!!!后来自己研究,包括查看B站找到了思路刚开始我的思路很乱总想着括号同时从两边添加,左右开弓,这样是很不好思考的思路图解(借的B站的图,我自己画的太丑了):看这个图,n=3,我们发现最下面的元素集合就是我们要的答案,总结一下这个图的思路1.首先每一个符合题目的元素长度都等于 2 * n(递归出口)2.左括号和右括号的数量不能大于n3.左括号的数量小于n就添加左括号4.右括号的数量小于..

2022-01-22 21:13:18 199

原创 leetcode70.爬楼梯

我刚看到这道题,有点没有头绪,我想到了可能是动态规划,但是还是没有头绪看了答案知道:我们用 f(x)表示爬到第 x级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子: f(x)=f(x−1)+f(x−2)有了这个规律就真简单了可见对于算法题,一定要先分析题目,当成一个数学题去找思路,对于算法来说更多的是去找规律我们找到了 以上的规律一下子简单起来了可以递归:public static int climbStairs(int n) {/..

2022-01-22 15:15:39 395

原创 leetcode53.最大子数组和

这道题我刚开始用暴力法发现很复杂很费劲,就放弃暴力法了。方法一:贪心算法1.准备变量:preSum记录上一次和,curSum记录本次和,maxAns记录最大和2.遍历数组,当上一次计算的和preSum小于0时,另preSum直接等于当前数组元素3.如果preSum大于等于0,curSum =preSum + 当前元素,并给preSum重新赋值为curSum4.每次遍历完一个元素计算maxAns代码: public static int maxSubArray(int...

2022-01-20 21:26:14 560

原创 堆排序图解流程及java实现

堆排序是八大排序中的一种,其时间复杂度是O(nlogn)堆分为大顶堆和小顶堆其中大顶堆升序,小顶堆降序堆排序分为两步1.构建堆2.交换堆顶元素和堆尾元素一、构建大顶堆图示流程:就是按照从下到上从右到左的顺序交换元素使得所有的根节点都大于孩子节点值二、交换堆顶元素和堆尾元素的值不断的重新构建堆并且交换堆顶元素和堆尾元素虽然我们画成了树的形式,但是并不用树,因为堆排序构建的是完全二叉树,可以通过数组来完美表示父节点与孩子节点的关系举例:根节点arr.

2022-01-20 18:10:41 962

原创 java中char类型数据运算

我们来看一下这段代码 char a = 121; char b = 122; System.out.println(a); System.out.println(b); System.out.println(a + b);这段代码的运行结果:前两行输出就是变量赋值对应的字符,但是最后一个加法输出为什么直接输出了两个数字的和呢?为什么这里直接转成整数类型来计算了呢?我们在很多地方都听过char类型的运算会转

2022-01-19 18:10:28 1015

原创 可达性分析算法代码举例

看深入理解java虚拟机的时候看到3.2.4节生存还是死亡(to be or not to be)的时候看到的一段代码有趣分享给大家即使在可达性分析算法中判定为不可达的对象,也不是“非死不可”的,这时候它们暂时还处于“缓 刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没 有与GC Roots相连接的引用链,那它将会被第一次标记,随后进行一次筛选,筛选的条件是此对象是 否有必要执行finalize()方法。假如对象没有覆盖finalize()方法,或者fina

2022-01-18 21:07:48 535

原创 三色标记法详细图解

前言:了当前主流编程语言的垃圾收集器基本上都是依靠可达性分析算法来判定对象 是否存活的,可达性分析算法理论上要求全过程都基于一个能保障一致性的快照中才能够进行分析, 这意味着必须全程冻结用户线程的运行。在根节点枚举这个步骤中,由于GC Roots相比 起整个Java堆中全部的对象毕竟还算是极少数,且在各种优化技巧(如OopMap)的加持下,它带来 的停顿已经是非常短暂且相对固定(不随堆容量而增长)的了。可从GC Roots再继续往下遍历对象 图,这一步骤的停顿时间就必定会与Java堆容量直接成正比.

2022-01-18 19:53:06 4780 3

原创 GC,安全点相关

前言:解释安全点之前我们先要了解一个数据结构Oopmap很多垃圾回收算法都是基于可达性分析的,而可达性分析算法我们就要找到GC Roots迄今为止,所有收集器在根节点枚举这一步骤时都是必须暂停用户线程的,因此毫无疑问根节点 枚举与之前提及的整理内存碎片一样会面临相似的“Stop The World”的困扰。当用户线程停顿下来之后,其实并不需要一个不漏地检查完所有 执行上下文和全局的引用位置,虚拟机应当是有办法直接得到哪些地方存放着对象引用的。在HotSpot 的解决方案里,是使用一组称为Oo

2022-01-18 18:46:46 936

原创 2022/1/17

今天看数据结构。搜索二叉树,平衡二叉树前序遍历、中序遍历、后序遍历、层次遍历昨天仿写了HashMap源码,今天系统看了JDK1.7的HashMap源码源码分析写了博客做了一道动态规划的leetcode,寻找最短路径问题...

2022-01-17 22:31:32 310

原创 JDK1.7HashMap源码分析

前言:HashMap是我们在编程过程中非常常见的一个数据结构主要功能是存放键值对(K-V)我们都知道HashMap在jdk7中是以数组+链表的形式构成的(JDK8的改动还是比较大的,数组+链表/红黑树构成)HashMap中数组和链表的关系如下类似这个形状:那么HashMap源码的原理到底是怎么样的呢,我们来分析一下一、图解流程二、源码分析分析一:put方法分析1.我们new一个HashMap对象2.点进方法这里有两个成员变量...

2022-01-17 19:12:19 528

原创 2022/1/16

今天依旧是javase,Java核心卷1。书本好枯燥不过对lambda表达式,集合等有了新的认识今天用链表实现了一个栈和队列简单模仿者自己写了个hashmap的源码,还有不足晚上刮胡子挂半天刮不掉,以为刮胡刀花了,搞了半天发现壳儿没摘。。。今天周日,斗破苍穹三年之约最后一集更新了,期待萧炎中州之旅然后回来暴走云山偶然间看到河北大学万能墙发的一个说说分享一下,可能会emo长大,好像是一个逐渐学会说“算了”的过程。有的人说,毕业季的时候,眼看着各奔东西了,散伙饭的时候喝了好多酒,

2022-01-16 22:43:59 92

原创 java用链表实现队列结构

我们直到队列是先进先出的特性,所以在给链表添加元素的时候用尾插法更加合适,最新添加的元素永远在队尾,最早添加的元素在头节点处链表结构:public class ListNode { public int val; public ListNode next; public ListNode(){} public ListNode(int val){ this.val = val; } public ListNode(int val,ListNode next)

2022-01-16 16:59:09 270

原创 java用链表实现栈结构

首先看我的链表类public class ListNode { public int val; public ListNode next; public ListNode(){} public ListNode(int val){ this.val = val; } public ListNode(int val,ListNode next){this.val = val;this.next = next;} @Override public S

2022-01-16 16:53:38 362

原创 金银铜牌排序问题

题目:奥运会开始了,请你为各个国家和地区作奖牌排序,按照金牌>银牌>铜牌的格式顺序排序输入:第一行 告诉你共有n个国家接下来的n行 每行三个数字 分别代表 金牌数了 银牌数量 铜牌数量 中间用空格隔开输出:输出n行 每行三个数字 按照题意进行排序样例输入:51 2 32 3 41 4 61 4 30 3 4样例输出:2 3 41 4 61 4 31 2 30 3 4思路比较简单优先比较第一列数字,然后比较...

2022-01-16 11:13:44 1367

原创 2022/1/15

今天学习时间比较长,有7个小时春招号角越来越响,压力来了今天主要看了java核心卷1,巩固基础知识,本以为是复习,没想到是预习看到印象深的记录在了博客,比如类初始化过程,反射的一些用法,自动拆装箱,128陷阱等基础知识理解的越深,越佩服发明java的人,五体投地晚上就不学了,晚上总结一下白天的学习,今天周六,顺便把最新的斗罗大陆看了明天斗破苍穹三年之约就最后一集了,好可惜这段时间好像一直一个人在学习,再加上在家的原因确实感到了寂寞不过高中一篇议论文的题目我至今印象深刻叫“寂寞

2022-01-15 19:39:49 64

原创 java反射类方法

今天看java核心卷1,看到了反射中的一段代码,试着运行了一下感觉瞬间头脑清楚多了,不像原来的无头苍蝇,东一榔头西一棒槌public class ReflectionTest { public static void main(String[] args) { String name = "com.java.easy.User"; try { Class cl = Class.forName(name); Clas

2022-01-15 19:31:39 126

原创 类的初始化顺序demo

分享一个类的加载初始化代码demo,这段代码考察类中内容的加载顺序,很有意思一起钻研走一下public class InitializeDemo { private static int k = 1; private static InitializeDemo t1 = new InitializeDemo("t1"); private static InitializeDemo t2 = new InitializeDemo("t2"); private sta

2022-01-15 15:08:03 197

原创 128陷阱

128陷阱指的是什么?看一下下面的代码 Integer a = -128; Integer b = -128; Integer c = 128; Integer d = 128; System.out.println(a==b); System.out.println(c==d);输出是 true 和false为什么赋值128的时候会是false呢?不都是128吗?赋值-128怎么就true了呢?

2022-01-15 11:30:29 128

原创 2022/1/14

今天看了一下快速排序和归并排序归并排序我没有用归并,而是循环的方式。今日小记:递归都可以通过循环的方式结合栈等结构来实现,可能代码会复杂一些,但是递归的代价会更大,因为递归是对方法的压栈今天买的转换器到了,给笔记本外接了一个显示器,十几年前家里买的第一台台式机的显示器,虽然色彩什么的差了些,但是够用了,笔记本写代码,显示器查资料,b格一下高了hhhh2022/1/14...

2022-01-14 21:44:22 106

原创 归并排序代码

找了一张现成的图片,图片所示就是归并排序的过程代码:我的代码并没有用递归,而是用来循环的方式public static void main(String[] args) { int[] arr = {65,34,54,67,1,33,543,674,435,764,31,-1,-5,-678,0,0}; int[][] arr2 = new int[arr.length][1]; for (int i = 0; i <arr.length ;

2022-01-14 21:37:35 169

原创 2022/1/13

今日日记百度百科:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。今天

2022-01-13 21:01:22 110

原创 leetcode_538把二叉搜索树转换为累加树

我们知道搜索二叉树也叫有序二叉树每一个节点的左节点值小于当前节点,右节点大于当前节点,简单理解为左小又大,是由顺序的所以叫有序二叉树,因为有顺序方便搜索又叫搜索二叉树这道题虽然中等题但是理解题意就并不难,题意就是将原来的数的每个节点的值换成当前节点本身的值 + 当前节点所有右边子树的值(右边的值比他大)最后就是答案我们只需要反序中序遍历该二叉搜索树,记录过程中的节点值之和,并不断更新当前遍历到的节点的节点值,即可得到题目要求的累加树。我在本地写了一个数结构以及搜索树的初始化函数...

2022-01-13 17:13:16 186

原创 2022/1/12

今天复习了链表:头插、尾插、反转、判断环栈:写了泛型的可扩容的栈结构队列:泛型的可扩容的循环队列结构,扩容这遇到了点问题,脑子不清楚了明天再写把,休息。

2022-01-12 21:38:43 217

原创 java用数组写一个泛型的栈结构

栈:它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。特点:先进后出代码:public class StackDemo<E>{ private E[] arr = (E[])new Object[20]; private in

2022-01-12 21:26:55 245

空空如也

空空如也

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

TA关注的人

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