自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go语言简单爬取

以爬取百度贴吧为例,步骤如下:1.确定爬取网址2.爬取网页内容3.处理数据4.将信息保存到文件参考代码:package mainimport ( "fmt" "io" "net/http" "os" "strconv")func HttpGet(url string) (result string, err error) { resp, err1 := http.Get(url) if err1 != nil { err = err1 return } d

2021-04-24 22:51:34 590 2

原创 Go语言实现文件拷贝

实现思路:1.使用os.Open()打开文2.使用os.Create()新建目的文件3.创建一个缓冲区,将读取到的文件写到缓冲区中4.往目的文件中写入,读多少写多少package mainimport ( "fmt" "io" "os")func main() { // 获取命令行参数 list := os.Args if len(list) != 3 { fmt.Println("参数错误") return } srcFileName := list[1] d

2021-03-31 00:24:27 685

原创 Java中常用的设计模式

本文简单介绍Java中常用的几种设计模式:单例模式,工厂模式,建造者模式,适配器模式,装饰模式,观察者模式。1.单例模式:单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。(1)饿汉式:直接创建一个对象。public class Singleto

2020-07-06 12:22:16 513 1

原创 个人博客项目

一.项目功能描述:主要分为4大功能模块,用户登录功能,文章评论功能,发布和修改文章功能,文章分类。登录首页之后可以查看所有文章的信息,但是此时只能查看,不能修改。如果想要对文章进行操作,就需要用户登录(利用数据库保存的用户名和密码)。用户登陆之后可以对文章进行评论,发布新的文章,修改和删除已经发布的文章,创建和删除新的文章类型。二.项目流程首先在输入url,根据不同的url调用后台 Controller 中的方法,Controller 中的方法再调用 Servise 逻辑层中的方法,Service 中

2020-05-18 17:17:04 9331 2

原创 JVM垃圾回收算法与垃圾收集器

1.垃圾回收算法1.1标记-清除算法"标记-清除"算法是最基础的收集算法。算法分为"标记"和"清除"两个阶段 : 首先标记出所有需要回收的对象,在标 记完成后统一回收所有被标记的对象。后续的收集算法都是基于这种思路并对其不足加以改进而已。标记-清除算法的两个缺点:(1) 效率问题 : 标记和清除这两个过程的效率都不高(2) 空间问题 : 标记清除后会产生大量不连续的内存碎片,空间碎片太多...

2020-04-15 23:19:45 195

原创 Java内存区域

Java内存区域JVM会在执行Java程序的过程中把它管理的内存划分为若干个不同的数据区域。这些数据区域各有各的用处,各有 各的创建与销毁时间,有的区域随着JVM进程的启动而存在,有的区域则依赖用户线程的启动和结束而创建与销 毁。一般来说,JVM所管理的内存将会包含以下几个运行时数据区域线程私有区域:程序计数器、Java虚拟机栈、本地方法栈线程共享区域:Java堆、方法区(1)程序计数器(...

2020-04-15 22:25:22 158

原创 macos如何取消开机声音

相信很多人刚用macos系统时会遇到这个问题,怎样取消macos系统开机的“咚”的声音,下面我来介绍一下两种方法:方法一:在关机前将电脑设置为静音(即F10),那么在下次开机时电脑就没有“咚”的声音了方法二:设置关机快捷键,利用设置快捷键的方式关机,在开机时也没有“咚”的声音。步骤如下:1.在设置中找到键盘2.然后点击快捷键3.找到应用快捷键4.点击下方的 + 号...

2020-02-28 11:19:11 9603

原创 Mac下使用SSH连接远程Linux服务器

本文主要介绍三种方法,在Mac下使用SSH连接远程Linux服务器。方法一:使用终端1.打开终端,点击新建远程连接2.点击加号,然后添加自己服务器的IP地址3.点击右侧的服务器,然后在下方输入用户名,选择最下方的 ssh + 自己远程服务器的IP地址,最后点击连接。4.输入密码(注意在输入密码时没有*提示),就完成了。方法二:使用iTerm21.打开iTerm2并输入命令:...

2020-02-17 11:14:52 35863 3

原创 Java 抽象类和接口

1. 抽象类:abstract class Shape { abstract public void draw();}在 draw 方法前加上 abstract 关键字, 表示这是一个抽象方法. 同时抽象方法没有方法体(没有 { }, 不能执行具体 代码).对于包含抽象方法的类, 必须加上 abstract 关键字表示这是一个抽象类.注意事项:抽象类不能直接实例化抽...

2020-01-19 17:39:07 294

原创 Java面相对象编程

1.继承1.1语法规则class 子类 extends 父类 {}使用 extends 指定父类.Java 中一个子类只能继承一个父类子类会继承父类的所有的字段和方法.对于父类的 private 的字段和方法, 子类中是无法访问的.子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用.代码示例:class Animal { pub...

2020-01-19 16:39:37 370

原创 Java 类和对象

1.类和对象初步认识面向对象就是用代码(类)来描述客观世界的事物的一种方式. 一个类主要包含一个事物的属性和行为2.类和类的实例化类就是一类对象的统称。对象就是这一类具体化的一个实例。一个类可以产生无数个对象基本语法// 创建类class <class_name>{field;//成员属性method;//成员方法 }// 实例化对象<class_n...

2020-01-14 12:10:48 181

原创 自己实现简易版本的Http服务器

1.模块设计:Http服务器需要解析来自浏览器端的数据,因此我们需要设计两个类。(1)Request类,负责保存浏览器端的信息;(2) HttpServer 类,负责处理浏览器端的信息2.详细设计主要解析三部分的请求数据:(1)请求行(2)请求报头(3)请求正文其中请求行包括三部分:请求方法,url,版本号。请求报头可以解析到哈希表中请求正文也需要解析到哈希表中这里...

2020-01-08 17:15:01 685

原创 网络原理之Http

1.Http协议格式Http请求※首行:[方法] + [url] + [版本]※Header:请求的属性,冒号分隔的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束※Body:Header空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。Http响应※首...

2020-01-08 16:08:19 273

原创 LeetCode-5303 解码字母到整数映射

原题链接:添加链接描述原题解作者链接:添加链接描述题目描述:给你一个字符串 s,它由数字(‘0’ - ‘9’)和 ‘#’ 组成。我们希望按下述规则将 s 映射为一些小写英文字符:字符(‘a’ - ‘i’)分别用(‘1’ - ‘9’)表示。 字符(‘j’ - ‘z’)分别用(‘10#’ - ‘26#’)表示。返回映射之后形成的新字符串。题目数据保证映射始终唯一。示例1:输入:s...

2020-01-06 13:41:33 231

原创 Java对象序列化与反序列化

1.序列化与反序列化的定义:序列化:把对象转化为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。...

2020-01-05 11:21:06 142

原创 JavaIO流基本操作

1.流的概念定义:在 Java中所有数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传 输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象 为各种类,方便更直观的进行数据操作。2.输入输出流输入 就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中。输出 则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁...

2020-01-04 21:35:04 230

原创 Java文件操作

1.文件1.1定义文件是相关记录或者放在一起的数据的集合1.2理解文件1.文件可以简单的理解成在外设硬盘上面保存数据的一种方式2.文件由两部分构成:属性(文件名,文件大小,文件类型等) + 内容(文件里面放的东西)2.File文件操作类在 java.io 包之中,用 File 类来对文件进行操作(创建、删除、取得信息等)2.1File类的初始化java.io.File...

2020-01-04 15:16:25 190

原创 自己实现定时器

思路:1.由于定时器涉及到时间问题。所以在线程执行时需要判断时间是否允许,而且又是在多线程环境下,所以我们采用优先级阻塞队列来存取任务。2.存放的任务我们定义为 MyTimerTask 类,而且要重写 Comparable 接口来确定优先级。3.和实现前面的线程池方法类似,我们在创建定时器对象是直接确定线程池的大小和优先级阻塞队列的大小,并且直接启动线程。线程的 run 方法也是从优先级阻...

2019-12-31 15:12:59 345

原创 自己实现固定数量的线程池

自己实现阻塞式队列链接:https://editor.csdn.net/md/?articleId=103772230我们借助上次自己实现的阻塞式队列来完成这个线程池。思路:1.我们利用阻塞式队列来保存需要执行的任务.2.要实现线程池首先要有一个线程数组。在创建一个线程池对象的时候,我们直接传入两个参数分别是线程池的大小和阻塞式队列的大小。并且直接启动每一个线程。我们把上面的工作直接放在...

2019-12-31 14:31:01 952 2

原创 自己实现阻塞式队列

由于阻塞式队列主要实现入队列和出队列操作,因此我们可以用阻塞式队列实现生产者消费者模型。生产者消费者模型:生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消...

2019-12-30 19:56:32 263

原创 单例模式

1.饿汉模式在初始化时直接new对象 class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; }}...

2019-12-30 18:56:34 87

原创 通信对象的等待及唤醒

1.wait()方法wait()方法使用在同步方法或者同步代码块中。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)观察wait()方法的使用 public static void main(String[] args) ...

2019-12-30 18:31:39 206

原创 线程安全

1.线程安全的概念:想给出一个线程安全的确切定义是复杂的,但我们可以这样认为:如果多线程环境下代码运行的结果是复核我们预期的,即在单线程环境应该得到的结果,则这个程序是线程安全的。2.观察线程不安全:创建一个静态变量COUNT,创建20个线程每个线程对COUNT加加一万次,预期结果是20万。public class UnsafeThread { public static ...

2019-12-30 17:46:06 176 1

原创 线程的状态及转移

线程主要分为6种状态:初始,可运行,等待,超时等待,阻塞,终止。其中可运行态包括就绪态和运行中。观察线程的六种状态:public class TheadStateTest { public static void main(String[] args) { //枚举线程的所有状态 for (Thread.State state : Thread.S...

2019-12-30 13:35:31 434

原创 线程等待及休眠

1.线程等待 join()有时,我们需要等待一个线程完成它的工作后,才能进行自己的下一步工作。public class JoinTest { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new Runnable() { ...

2019-12-30 13:23:39 679

原创 线程中断

中断线程用thread.interrupt()方法,注意的是thread.interrupt()方法并不是真正的将线程中断,而是将标志位修改为 true。此外我们可以用Thread.interrupted()和Thread.currentThread().isInterrupted()来判断当前线程的是否被中断。其中三个方法的注意事项如下:1.通过 thread 对象调用 interrup...

2019-12-28 18:58:18 100

原创 线程的创建及常见的方法

一、线程的创建1.继承 Thread 类可以通过继承 Thread 来创建一个线程类,该方法的好处是 this 代表的就是当前线程,不需要通过 Thread.currentThread() 来获取当前线程的引用。class MyThread extends Thread { @Override public void run() { System.out.pr...

2019-12-28 17:58:35 159

原创 Java 生成随机字符串

思路:先创建一个字符数组,其中放入自己想要生成的字符串所包含的字母,设定需要生成的字符串的个数,然后用 Random 来生成一个随机数作为该字符串的长度,再用 StringBuffer或者 StringBuider 进行拼接即可。public static void main(String[] args) { // 生成随机字符串 // 创建一个字符数组 char[] c...

2019-12-28 10:52:27 573

原创 LeetCode-1296 划分数组为连续数字的集合

原题链接:https://leetcode-cn.com/problems/divide-array-in-sets-of-k-consecutive-numbers/原题解作者链接:https://leetcode-cn.com/problems/divide-array-in-sets-of-k-consecutive-numbers/solution/java-sorthashmap-by...

2019-12-27 11:53:25 418

原创 LeetCode-670 最大交换

原题链接:https://leetcode-cn.com/problems/maximum-swap/题目:给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值示例1:输入: 2736输出: 7236解释: 交换数字2和数字7。示例2:输入: 9973输出: 9973解释: 不需要交换。思路:先根据给定的数字,把数字的每一位拆分并放到 lis...

2019-12-22 12:48:49 289

原创 LeetCode-349 两个数组的交集

原题链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/题目:给定两个数组,编写一个函数来计算它们的交集。示例1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]...

2019-12-21 22:44:44 109

原创 操作系统简介

1.冯诺依曼体系结构主要包括四大部分:输入设备、储存器、中央处理器(CPU)、输出设备。 其中中央处理器包括运算器、控制器和寄存器等。注:此处的储存器指内存;不考虑缓存情况,此处的CPU能且只能对内存进行读写,不能访问外设; 外设要输入或者输出数据也只能写入内存或者从内存中读取。2.操作系统2.1概念任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)....

2019-12-12 17:23:33 152

原创 MySQL索引与事务

1.索引1.1概念:索引是引种特殊的文件,包含着对数据表里所有记录的引用指针。可以表中一列或者多列创建索引,并制定索引的类型,各类索引有各自的数据结构实现。1.2作用:索引可以快速定位、检索数据,索引对于提高数据库的性能有很大帮助。1.3使用场景:a)数据量较大,并且经常对这些列进行条件查询。b)对该表的插入和修改的频率比较低。c)索引占用一定的硬盘空间,因此电脑的硬盘空间要充足。1...

2019-12-12 14:52:34 283

原创 macos 如何查找某个应用的安装路径,并且根据安装路径找到该文件

由于 macos 没有像 Windows 系统那样明确的硬盘,当我们想要查找某个应用的安装目录时,有时候我们会忘记了应用的安装路径,此时我们可以利用终端查找文件的路径,并且根据该路径找到该文件。本文以查找 java.exe 为例1.首先,我们打开终端,在终端中输入 whereis + “应用”命令 或者 输入 which + “应用”命令2.根据返回的路径在访达中查找。先复制路径,打开访...

2019-12-11 14:44:33 18780 1

原创 JDBC使用

1.使用步骤:(1)创建数据库连接 Connection创建数据库连接主要有两种方式:a)一种是通过 DriverManager(驱动管理类)的静态方法获取 private static final String URL = "jdbc:mysql://localhost:3306/java12?characterEncoding=utf8&amp;useSSL=false";...

2019-12-08 16:06:53 339

原创 Java 的 JDBC 的配置(以 MySQL为例)

1.数据库编程的必备条件:编程语言:Java数据库:MySQL数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc2.Java的数据库编程:JDBCJDBC即J...

2019-12-07 12:32:43 684

原创 LeetCode 查找常用字符

原题链接:https://leetcode-cn.com/problems/find-common-characters/原题解作者解题链接:https://leetcode-cn.com/problems/find-common-characters/solution/9507-java-by-li-hao-yu-ustc/题目描述:给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符...

2019-12-06 17:15:28 210

原创 Java 对象的比较

1.关于对象值相等的比较:p == q 表示的是两个引用指向同一个对象p.equals(q) 默认情况下也是比较身份。示例:class Card1 { public String suit; public int rank; public Card1(String suit, int rank) { this.suit = suit; ...

2019-11-29 15:52:09 147

原创 排序算法

排序的相关介绍:所谓的排序就是使一串记录,按照其中的某个或者某些关键字的大小,递增或递减的排列起来的操作。平时的上下文中如果提到排序,通常指的是升序(非降序)。通常意义上的排序都是指的原地排序稳定性:两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法。1.直接插入排序:将区间分为有序区间和无序区间。前半部分为有序区间,后半部分为无序区间...

2019-11-17 19:31:16 166

原创 树及二叉树的相关概念

1.树是一种非线性结构,它是由 n(n >= 0)个有限节点组成一个具有层次关系的集合。它具有以下特点:a) 每个节点有零个货多个子节点;b) 没有父节点的节点称为根节点;c) 每一个非根节点有且只有一个父节点;d) 除了根节点之外,每个子节点可以分为多个不相交的子树。2.相关概念(1)节点的度:一个节点含有的子树的个数称为该节点的度(2)树的度:一棵树中,最大的节点的度(3...

2019-11-06 18:39:19 165

空空如也

空空如也

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

TA关注的人

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