自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一个双非本科普通学生加入字节之路 也是大学四年的总结

今天在公司吃完晚饭,在工位上玩手机的时候看到小米在做发布会,作为半个米粉,就去看了看...刚开始雷总在回顾这些年,看的我也想回顾一下自己这几年都干了啥。说干就干,回到家就开始敲起了键盘转眼之间已经上班快一个月了,也是步入社会快一个月,从学生转变为一个打工人,来到陌生的城市、租房、适应工作节奏......想在还能想起来上大学的第一天,不禁感叹时光飞逝,人生中的校园生活就这样结束了,还有些不舍,快毕业的时候,一度想去考研hhh大一的时候还是...

2021-08-10 21:56:13 863

原创 centos安装mysql57

通过docker安装1# uname -r2# sudo yum remove docker*3# sudo yum install -y yum-utils device-mapper-persistent-data lvm24# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo5# sudo yum makecache fast6# s

2021-01-11 22:34:48 204

原创 centos安装jdk1.8

yum安装:1、搜索jdk安装包# yum search java|grep jdk2、下载jdk1.8,下载之后默认的目录为: /usr/lib/jvm/# yum install java-1.8.0-openjdk3、配置环境变量及验证安装。

2021-01-11 22:22:25 248

原创 Java当中的内存泄漏

内存泄露的原因:1.作用域大小不一样2.长生命周期引用短生命周期3.改变hash值4.用String连接字符串5.一些连接资源没关闭6.静态变量容器7.单例对象引用外部对象怎么避免内存泄露:1.作用域尽量保持一致2.用StringBuffer或者StringBuilder代替String连接字符量3.不再使用的对象值赋值为null4.连接资源的对象要关闭5.尽量少使用静态变量...

2020-11-19 15:26:24 120

原创 为什么说ArrayList是线程不安全的?

一.概述对于ArrayList,相信大家并不陌生。这个类是我们平时接触得最多的一个列表集合类。面试时相信面试官首先就会问到关于它的知识。一个经常被问到的问题就是:ArrayList是否是线程安全的?答案当然很简单,无论是背来的还是自己看过源码,我们都知道它是线程不安全的。那么它为什么是线程不安全的呢?它线程不安全的具体体现又是怎样的呢?我们从源码的角度来看下。二.源码分析首先看看这个类所拥有的部分属性字段:public class ArrayList<E> extends Abstr

2020-08-11 18:28:12 301

原创 信息小管家

在学习了数据库和Servlet的知识之后,想着写一个项目来练习一下这部分,于是通过学生信息管理系统来完成这个任务项目的主要业务是进行学生信息的管理,包括学生信息的增加,删除,查询,更新通过前端的请求,后端进行响应,返回JSON格式的数据,然后前端进行解析,显示到页面上.数据库设计班级和学生信息表为一对多关系数据字典表和数据字典标签表为一对多关系字典表说明数据字典表和数据字典标签表主要用在一些通用的下拉菜单选项。如班级表中的字段:学生是哪一届的,学生专业如果单独设计需要单独一张表,实际存

2020-08-08 23:40:37 317

原创 在浏览器输入URL回车后发生了什么

在浏览器输入URL回车后发生了什么?可以通过两个方面来聊纯应用层的讲述(HTTP协议/DNS协议)从网络原理角度来聊从应用层来说1.用户输入URL,回车之后,可能有浏览器搜索引擎的处理,比如输入一个汉字2.浏览器通过DNS协议来解析域名,如果输入的是ip就跳过这条关于如何域名(domain)解析为 ip浏览器内部有缓存,之前处理过,这个域名,所以就直接返回找操作系统OS帮忙1 /etc/hosts固定hosts2 去 IPv4DNS服务器问 1

2020-08-08 14:21:40 232

原创 用Java实现简单HTTP服务器———Tomcat

1. 理解模型首先我们先了解一下tomcat的大致工作原理。tomcat的核心是servlet容器,我们称它为CatalinaConnector是用来“连接”容器里边的请求的。它的工作是为接收到每一个 HTTP 请求构造一个 request 和 response 对象。然后它把流程传递给容器。容器从连接器接收到 requset 和 response 对象之后调用 servlet 的 service 方法用于响应。这是自己实现的时候的流程2. 服务器搭建我们先来熟悉一下整个流程构建Htt

2020-08-07 17:56:41 1988

原创 Java抽象类实现接口可以不用实现方法

众所周知,在实现类中实现接口时,必须全部重写接口的抽象方法,如public interface MyInter{  function abstract void A();  function abstract voidB();}//实现类中,必须全部重写A和B方法public class MyClass implements MyInter{  public void A(){}  public void B(){}}如果不重写接口的方法可以吗?可以,但实现类一定要是一个

2020-08-06 18:17:34 7177 2

原创 不同子序列

不同子序列(Distinct Subsequences)难度:Hard备注:出自leetcode题目描述Given a string S and a string T, count the number of distinct subsequences of T in S.A subsequence of a string is a new string which is formed from the original string by deleting some (canbe none)

2020-08-03 23:13:54 245

原创 编辑距离

编辑距离(Edit Distance)难度:Hard备注:出自leetcode题目描述Given two words word1 and word2, find the minimum number of steps required to convert word1 toword2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a word:a) Insert a

2020-08-03 23:09:28 178

原创 回文串分割

回文串分割(Palindrome Partitioning)难度:Hard备注:回文串知识,出自leetcode题目描述Given a string s, partition s such that every substring of the partition is a palindrome.Return the minimum cuts needed for a palindrome partitioning of s.For example, given s =“aab”, Return

2020-08-03 23:04:15 910

原创 背包问题

背包问题题目描述有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值.问最多能装入背包的总价值是多大?背包问题状态:F(i, j): 前i个物品放入大小为j的背包中所获得的最大价值状态递推:对于第i个商品,有一种例外,装不下,两种选择,放或者不放如果装不下:此时的价值与前i-1个的价值是一样的F(i,j) = F(i-1,j)如果可以装入:需要在两种选择中找最大的F(i, j) = max{F(i-1,j), F(i-1, j -

2020-08-03 22:54:04 173

原创 最小路径和

最小路径和(Minimum Path Sum)难度:Medium备注:出自leetcode题目描述Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right whichminimizes the sum of all numbers along its path.Note: You can only move either down or right at any p

2020-08-03 22:49:02 149

原创 路径总数

路径总数(Unique Paths)难度:Easy备注:出自leetcode题目描述A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to reach thebottom-right

2020-08-03 22:44:58 875

原创 三角矩阵

三角矩阵(Triangle)难度:Medium备注:出自leetcode题目描述Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacentnumbers on the row below.For example, given the following triangle[ [2], [3,4], [6,5,7],[4,1,8,3]]Th

2020-08-03 22:37:08 1878

原创 字符串分割

字符串分割(Word Break)难度:Medium备注:出自leetcode题目描述Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separatedsequence of one or more dictionary words.For example, given s =“leetcode”, dict =[“leet”, “code”].Retur

2020-08-03 22:32:12 189

原创 斐波那契数列

Fibonacci难度:Easy备注:斐波那契数列,出自《剑指offer》题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39int Fibonacci(int n)来源:牛客-剑指Offer分析:斐波那契数列定义:F(n)=F(n-1)+F(n-2)(n>=2,n∈N*),其中F(1)=1,F(2)=1动态规划状态:F(n)状态递推:F(n)=F(n-1)+F(n-2)初始值:F(1)=F(2

2020-08-03 22:27:17 130

原创 【NowCoder】最大连续数列和

对于一个有正有负的整数数组,请找出总和最大的连续数列。给定一个int数组A和数组大小n,请返回最大的连续数列的和。保证n的大小小于等于3000。测试样例:[1,2,3,-6,1]返回:6解释:[1, 2, 3]输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路:需要明白一点,类似于:[2, -1, 100, 5, 34, -50]这样的数组,因为 2+(-1) = 1的,对结果值有增益效果,所以可以保

2020-07-17 10:44:56 179

原创 Java线程池

1、线程池的优势(1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。(4)提供更强大的功能,延时定时线程池。2、线程池的主要参数public ThreadPoolExecut

2020-06-21 21:15:01 169

原创 生产者消费者模型

生产者消费者模式是并发、多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据。真实世界中的生产者消费者模式生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系。比如一个人正在准备食物(生产者),而另一个人正在吃(消费者),他们使用一个共用的桌子用于放置盘子和取走盘子,生产者准备食物,如果桌子上已经满了就等待,消费者(那个吃的)等待如果桌子空了的话。这里桌子就是一个共享的对象。直接使用Java的BlockingQueu

2020-06-21 20:42:44 178

原创 实现阻塞队列

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种:当队列满了的时候进行入队列操作当队列空了的时候进行出队列操作因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有

2020-06-21 20:37:18 1101

原创 单例模式的各种优化

饿汉类加载的时候就创建了实例优点:类加载的时候创建一次实例,避免了多线程同步问题缺点:即使单例没被用到也会创建,浪费内存public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; }}饿汉-

2020-06-21 08:56:00 259

原创 Java多线程之Volatile

volatile 修饰的共享变量,可以保证可见性,部分保证顺序性class ThraedDemo { private volatile int n;}可见性:可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比

2020-06-21 00:53:12 196

原创 Java多线程之Synchronized

synchronized的底层是使用操作系统的mutex lock实现的。当线程释放锁时,JMM会把该线程对应的工作内存中的共享变量刷新到主内存中当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取共享变量synchronized用的锁是存在Java对象头里的。synchronized同步快对同一条线程来说是可重入的,不会出现自己把自己锁死的问题;同步块在已进入的线程执行完之前,会阻塞后面其他线程的进入。语法:修饰方法定义 同步方法修

2020-06-20 21:48:22 250

原创 Java多线程总结

1.线程:要解释线程,就必须明白什么是进程进程时系统资源分配的最小单位,线程是系统调度的最小单位。一个进程内的线程之间是可以共享资源的。每个进程至少有一个线程存在,即主线程。1.1 多线程的优势 - 增加运行速度多线程在一些场合下是可以提高程序的整体运行效率的1.2 Java语言中,创建线程的基本方法(本质核心都需要有一个Thread对象出来)创建一个Thread对象 + 关联任务创建一个Thread类,并且复写run方法 (覆写了线程的 任务)new该类的对象

2020-06-20 18:43:46 585

原创 关于JVM内存

这是一个比较官方的图JVM 内存模型图Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区: 程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区 下面详细阐述各数据区所存储的数据类型。运行时数据区包括:程序计数器、虚拟机栈、本地方法栈、Java堆、方法区以及方法区中的运行时常量池1、程序计数器: 线程私有,是当前线程所执行的字节码的行号指示器,如果线程正执行一个java方法,计数器记录正在执

2020-06-20 10:06:46 202

原创 Windows下jps, jconsole无法查看本地java进程

在使用jonsole时,不显示Java进程信息是因为当前用户并无权限在一个文件夹下创建文件找到这个文件夹C:\Users%USER%\AppData\Local\Temp\注此处%USER%为变量代表操作系统用户名进入该目录,看到有个hsperfdata_%USER%目录,进入该目录,发现该目录下没有任何文件。(当然我这个是改好的,所以里面有东西)经验证当前用户并无权限在此文件夹下创建文件。空白处右击 属性->安全发现组或用户名中没有我当前使用的用户,点击 编辑->添加

2020-06-19 22:42:47 913

原创 Java中的引用类型的对象存放在哪里

根据上下文来确定。根据上下文来确定。根据上下文来确定。比如void func(){ Object obj = new Object();//这个obj在函数的栈里。}class Test{ private Object obj = new Object();//这个obj随对应的Test对象分配在堆里}对于方法中的局部变量的引用时存放在java运行时数据区的栈中,对于实例变量则是存放在java运行时数据区的堆中。...

2020-06-19 12:04:22 3789 1

原创 【NowCoder】机器人走方格

问题描述:有一个X*Y的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法给定两个正整数int x,int y,请返回机器人的走法数目,保证x+y小于等于12一开始的时候很正常都是没有思路的,所以把问题想得很复杂那么但是越复杂的时候我们越需要冷静,这个时候我们就需要使用一些简单的例子帮助我们来分析问题,因为这些简单的问题在某些情况下可以把大的问题分解成更小的问题直到最后有了解决问题的方案我们一开始可以画出一个1 * 1的方格,那么很容.

2020-06-10 22:55:44 754

原创 Java 实现七大基本排序算法

一、插入排序原理:整个区间别分为有序区间和无序区间每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入public static void insertSort(int[] array) { int tmp = 0; for (int i = 1; i < array.length; i++) { tmp = array[i]; int j; for (j = i-1; j >

2020-06-08 22:40:55 274

原创 Java实现归并排序

原理:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。递归版本思路:当只有一个元素的时候,递归终止先找到中间,然后递归左半边,递归右半边左右都递归完成就进行合并谁小把谁拿下来,当一个完了把另一个拉下来最后把临时数组复制给原来的数组实现代码:import java

2020-06-08 22:29:22 163

原创 Java实现快速排序

原理:从待排序区间选择一个数,作为基准值(par);Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度 == 0,代表没有数据.。递归版本思路:当left >= right的时候就结束递归先找到par然后递归(left,par-1);递归(par+1,right);实现代码:

2020-06-08 18:14:32 203

原创 Java为什么不能在方法内定义静态变量

1.由于JAVA规定,方法内定义的都是局部临时变量,且由于内存分配,会创建一个栈帧保存局部变量表、操作数栈,动态链栈等,在方法结束后,栈帧会出栈并释放掉所有局部变量。这个时候定义一个静态变量那会不会造成内存泄漏呢?会的,由于静态变量生命周期同类的对象一致。因此不能。2.在人性化的设计中,静态变量大都用来供外界访问或类中各个方法共享。你在一个方法中定义了一个静态变量,那对于其他方法来说,前者内部是不可见的。且对于外界来说同样也是不可见的。这样便毫无意义。...

2020-06-05 17:59:02 3153 1

原创 mysql5.7 mysql8 安装时更改安装目录

mysql 默认安装在 c 盘,如果要更改安装位置,如安装到 d 盘,按照以下步骤做即可。mysql 5.6 mysql 5.7, mysql8 通用。记得一定要把MYSQL Server 8.0.15 -X64点一下,不然看不见下面的Advanced Options

2020-05-31 08:27:38 2650

原创 实现二叉搜索树

一、概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若他的左子树不为空,则左子树上所有的节点值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树这就是一颗二叉搜索树在这里实现二叉搜索树的插入、查找、删除1.插入这里的插入不考虑插入重复的节点,并且插入的位置一定是叶子节点如果是根节点直接插入定义一个节点cur来遍历,定义一个节点parent来保存父亲节点比当前节点大就咋右边,反之在左边最后看比父亲

2020-05-29 09:31:04 242

原创 实现堆Heap

在JDK1.8中的PriorityQueue底层使用了堆的数据结构,而堆实际就是在完全二叉树的基础之上进行一些元素的调整如果有一个关键码的集合K={k0,k1,k2,k3,…,kn-1},把他的所有元素按完全二叉树的顺序存储方式存储,在一个一维数组中,并满足:Ki <= K2i + 1 且 Ki <= K2i + 2(Ki >= K2i + 1且 Ki >= K2I + 2)i = 0,1,2…,则称之为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或

2020-05-23 21:12:06 259

原创 判断一棵树是不是完全二叉树

首先要知道什么是完全二叉树?完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。(来自百度)就是长这个样子我们怎么用代码实现呢?原理和层序遍历差不多往队列里面加的时候不管他的左右节点是不是空,都往进加出队列的时候如果遇到一个空,就跳出循环看后面的是不是都是空如果队列里面的都是空,那就是完全二叉树,否则不是代码:class Node { in

2020-05-21 00:03:35 181

原创 二叉树的层序遍历

完成二叉树的层序遍历的时候,需要维护一个队列先把二叉树的根节点放进队列然后弹出根节点,看根节点的左右节点是否为空不为空就加入队列不停的弹出队头元素,往队尾添加左右节点队列为空就完成层序遍历代码:class Node { int val; Node left; Node right; Node() {} Node(int val) { this.val = val; } Node(int val, Node left, Node right) {

2020-05-20 23:34:23 190

原创 【LeetCode】 101. 对称二叉树 Java版

对称二叉树给定一个二叉树,检查它是否是镜像对称的。实现思路:如果根节点为空,那就是对称的这里需要重新写一个函数判断根节点的左右子树是不是对称的如果左右都是空,那就是对称的如果有一个空那就不是对称的(left == null && right != null) || (left != null && right == null)然后需要左右子树的根节点的值相等的前提下,递归看左树的左,右树的右左树的右,右树的左代码:class TreeNode {.

2020-05-20 22:31:18 260

空空如也

空空如也

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

TA关注的人

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