自定义博客皮肤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)
  • 收藏
  • 关注

原创 排序算法实现及比较

排序算法比较

2022-03-18 10:35:45 883

原创 深度优先搜索与岛屿问题

深度优先搜索代码/** * DFS核心伪代码 * 前置条件是visit数组全部设置成false * @param n 当前开始搜索的节点 * @param d 当前到达的深度 * @return 是否有解 */bool DFS(Node n, int d){ if (isEnd(n, d)){//一旦搜索深度到达一个结束状态,就返回true return true; } for (Node nextNode in n){//遍历n相邻的节点next

2022-01-30 11:06:26 1386

原创 Java 方法调用与虚方法

1、静态绑定与动态绑定绑定是一个字段、方法或者类在符号引用被替换为直接引用的过程,这仅仅发生一次。方法调用与方法体的关联也是绑定。在JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制相关。有两种类型的绑定:静态绑定在编译时发生,动态绑定在运行时发生。(1)静态绑定当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知,且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态绑定。1)private:不能被继承,则不能通过子类对象调用,而只能通过类本

2022-01-07 14:01:59 2598

原创 JVM 创建对象过程

Java 中对象的创建方式一般有两种:1)new xxx() 通过new关键字创建实例对象;2)通过反射创建对象。不管哪一种创建方式,JVM 底层的执行过程是一样的。示例程序:public class Person {​ //静态变量 public static int staicVariabl=1; //成员变量 public int objVariabl;​ //静态初始代码块 static { staicVariabl

2022-01-03 20:04:38 703

原创 Java 继承中的属性隐藏与方法重写

一、变量隐藏——变量不具有多态性Java 中的变量不遵循多态性,所以重写仅适用于方法,而不适用于变量。 并且,当子类中的实例变量与父类中的实例变量具有相同的名称时,则从引用类型中选择该实例变量。在 Java 中,当子类中的实例变量与父类中的实例变量具有相同的名称时,子类的变量将隐藏父类的变量,即使它们的类型不同。 这种概念称为可变隐藏。在变量隐藏中,子类隐藏继承的变量而不是替换它们,这基本上意味着子类的对象包含两个变量,而子变量则隐藏了父变量。我们可以通过 super.x 来访问父类中的变量。示

2022-01-02 12:30:04 2701 1

原创 Java 字节码分析成员变量初始化顺序

一、无继承关系class Demo { private int p1 = 100; // 实例变量显式初始化 private static int p2 = 10; // 静态变量显式初始化 { p1 = 101; // 构造代码块初始化 } static { p2 = 11; // 静态代码块初始化 } public Parent() { // 构造函数初始化 this.p1 = 102;

2022-01-02 11:51:31 372

原创 Java 线程池

概述1、什么是线程池线程池就是首先创建一些线程,它们的集合称为线程池,使用线程池可以很好的提高性能。线程池在系统启动时就创建大量空闲的线程,程序将一个任务传给线程池。线程池就会启动一条线程来执行这个任务,执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。2、为什么使用线程池在执行异步任务或并发任务时,如果通过 new Thread() 方式创建新的线程,当系统不断的启动和关闭新线程以及过渡切换线程,会过度消耗系统资源,成本非常高,从而导致系统资源的崩溃,这时线

2021-12-29 15:59:53 324

原创 Java 基础 —— 序列化

一、什么是序列化Java 提供了一种对象序列化的机制,该机制中,一个对象可以被按字节进行持久化(被表示为一个字节序列),该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息和对象的数据,还有对象中的数据类型可以用来在内存中新建对象。序列化与反序列化都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。二、为什么要序列化我

2021-12-15 21:10:26 1541

原创 递归与动态规划

一、概述动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。1、线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等;2、区域动规:石子合并,加分二叉树,统计单词个数,炮兵布阵等;3、树形动规:贪吃的九头龙,二分查找书,聚会的欢乐,数字三角形等;4、背包问题:01背包问题,完全背包问题,分组背包问题,二维背包,装箱问题,挤牛奶等;举例A

2021-12-12 13:24:49 1864

原创 NLP 语义相似度常用计算方法总结

概述总文本相似度的计算方法主要分为三大类:一类是基于统计学的计算方法,此种方法在计算时没有考虑文本的句子结构信息和语义信息,计算的结果有时会与人对自然语言的理解不相符合;另一类是基于语义理解的计算方法,这种方法依赖于具有层次结构关系的语义词典,计算结果相对准确,与人对自然语言的理解较为符合;第三种类是基于深度学习的计算方法。1、基于向量空间模型的计算方法向量空间模型简称 VSM,是 Vector Space Model 的缩写,是应用较为广泛的一种信息检索模型。在此模型中,文本被看作是由一系列相互独立

2021-12-11 22:50:03 12065

原创 Java 常量池

常量池分为 Class 常量池常量池、运行时常量池、字符串常量池。1、 Class 常量池常量池(静态常量池)Java 文件被编译成 Class 文件,Class 文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项就是 Class 常量池,Class 常量池是当 Class 文件被 Java 虚拟机加载进来后存放各种字面量 (Literal)和符号引用 。字面量相当于 Java 语言层面常量的概念,如文本字符串、基础数据、声明为 final 的常量等;符号引用则属于编译原理方面的概念,

2021-12-11 19:26:04 7098 1

原创 String 类源码分析

源码分析1、成员变量public final class String implements java.io.Serializable, Comparable<String>, CharSequence { // 用不可变的 char 数组用来存放字符串 private final char value[]; // 缓存 String 的 hash 值 private int hash; // Default to 0 // 实现序列化的

2021-12-11 12:50:57 2526

原创 微服务熔断、降级——Hystrix

一、概述1、服务雪崩分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。雪崩效应常见场景1)硬件故障:如服务器宕机,机房断电,光纤被挖断等。2)流量激增:如异常流量,重试加大流量等。3)缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效

2021-12-08 15:19:23 4061 1

原创 局域网的主机如何连接外网

一、局域网内主机上外网——NAT1、内网与外网(1)内网即所说的局域网,比如学校的局域网,局域网内每台计算机的 IP 地址在本局域网内具有互异性,是不可重复的。但两个局域网内的内网 IP 可以有相同的。(2)外网即互联网,局域网通过一台服务器或是一个路由器对外连接的网络,这个 IP 地址是惟一的。也就是说局域网里所有的计算机都是连接到这一个外网 IP 上,通过这一个外网 IP 对外进行交换数据的。也就是说,一个局域网里所有电脑的内网 IP 是互不相同的,但共用一个外网 IP。(用ipconf

2021-12-08 12:08:52 36615 2

原创 Linux 的网络配置(以 CentOS 7 为例)

一、网络连接模式配置网络连接类型有桥接、NAT、仅主机和不联网四种。1、桥接桥接模式:虚拟机和宿主机在网络上就是平级的关系,相当于两者连接在同一交换机上。在桥接模式下,虚拟机手动配置的 IP 必须和宿主机属于同一网段,网关与 DNS 必须与宿主机网卡一致,相当于局域网内新建了一台主机。2、NAT 模式Netword Address Translation–网络地址转换(模式):借助宿主机来上网,没桥接那么麻烦,只用配置 DNS 即可。缺点:扎根于宿主机,不能和局域网内其它真实的主机进

2021-12-04 23:44:45 2889

原创 Eureka 集群搭建

一、Eureka 高可用集群在实际的生产环境中,eureka 常常是以集群的方式提供服务的,目的就是要保证高可用性,同时它还保证了分区容错性。这也满足了一个健壮的分布式系统所要求的 CAP 理论原则,即 eureka 保证了高可用性,分区容错性。二、Eureka 集群原理Eureka 的工作细节Eureka 本身可以分为两大部分,Eureka Server 和 Eureka Client。2.1 Eureka ServerEureka Server 主要对外提供了三个功能:服务注册:所有的

2021-11-29 21:48:06 13319 6

原创 POST 请求的四种提交数据方式

Content-Type 属性值HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中,POST 一般用来向服务端提交数据。HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面形式:<method> <url> <version><headers>

2021-11-27 21:12:18 2796

原创 JavaWeb 的常用的请求传参注解

1、@RequestMapping@RequestMapping 既可以用在类级别,也可以用在方法级别,当它定义在类级别的时候,标明该控制器所处理的请求都将被映射到这个路径下。另外,@RequestMapping中可以使用method属性,如果指定了method属性的值,那么就只能使用指定的请求方法,如果没有指定的话,那么就可以使用HTTP的get/post方法了。1、get 请求特点:a. 请求参数会添加到请求资源路径的后面,只能添加少量参数(因为请求行只有一行,大约只能存放2K左右的数据)b

2021-11-27 20:32:03 3294

原创 Linux上使用docker启动redis并远程访问

一、centos7 上安装 docker1、安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm22、安装 docker 的 yum 源yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo # 中央仓库yum-config-manager --add-repo http://mirror

2021-11-24 13:59:58 6215

原创 Redis 学习——入门篇

一、Redis 简介Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库,类似于 Java 中的 Map<key, value>。Redis 与其他 key - value 缓存产品有以下特点:(1)Redis 数据库中所有数据都存储在内存中,由于内存的读写速度远快于硬盘,因此 Redis 在性能上对比其他基于硬盘存储的数据库有非常明显的优势。(2)Redis 支持数据的持久化,可以将内存中的数据异步写入到磁盘中,重启的时候可以再次加载进行使用。(

2021-11-21 22:35:08 264

原创 Java基础——泛型

概述Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法,然后在使用/调用时传入具体的类型(类型实参)。Java 泛型也是一种语法糖,在编译阶段完成类型的转换的工作,避免在运行时强制类型转换而出现 ClassCastException 类型转化异常。

2021-11-18 23:55:05 721

原创 Java 基础 —— HashMap

一、ArrayList二、哈希表三、HashMapHashMap 是用于存储 Key-Value 键值对的集合。(1)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,所以具有很快的访问速度,但遍历顺序不确定。(2) HashMap 中键 key 为 null 的记录至多只允许一条,值 value 为 null 的记录可以有多条。(3) HashMap 非线程安全,即任一时刻允许多个线程同时写 HashMap,可能会导致数据的不一致。hashmap

2021-11-16 20:02:26 3435 3

原创 Java 基础 —— 集合框架概述

集合框架图Java 集合框架主要包括两种类型的容器:一种是集合(Collection),存储一个元素集合;另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型:List、Set 和 Queue。再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。集合框架内容:集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:1、

2021-11-15 20:26:49 1499 1

原创 Java 基础 —— Java 中的值类型与引用类型

一、值类型与引用类型在 Java 中类型可分为两大类:值类型与引用类型。值类型就是基本数据类型(如 int、double 等),而引用类型是指除了基本的变量类型之外的所有类型(如通过 class 定义的类型)。所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失),基本的变量类型只有一块存储空间(分配在stack中),而引用类型有两块存储空间(一块在 stack 中,一块在 heap 中)。什么是引用引用其实就像是一个对象的名字或者别名

2021-11-13 13:10:19 3382

原创 Java 基础 —— synchronized 关键字详解

一、synchronized 三大特性在多线程的环境下,多个线程同时访问共享资源会出现一些问题,而 synchronized 关键字则是用来保证线程同步的。synchronized 关键字可以保证并发编程的三大特性:原子性、可见性、有序性。而 volatile关键字只能保证可见性和有序性,不能保证原子性,也称为是轻量级的 synchronized。(1)原子性:一个或多个操作要么全部执行成功,要么全部执行失败。synchronized 关键字可以保证只有一个线程拿到锁,访问共享资源。(2)可见性:

2021-11-03 13:04:04 1698

原创 Java 基础——线程间通信

概述线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题。虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信。线程通信主要可以分为三种方式,分别为共享内存、消息传递和管道流:(1)共享内存1)volatile 关键字2)synchronized 关键字3)Lock 锁(2)消息传递1)Object 的 join()/notify() 机制;2)Lock 和 Condition 的

2021-11-03 09:31:40 887

原创 Java 基础 —— 线程安全

一、线程安全问题线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的一个程序在运行起来的时候会转换成进程,通常含有多个线程。通常情况下,一个进程中的比较耗时的操作(如长循环、文件上传下载、网络资源获取等),往往会采用多线程来解决。又比如实际生活中,银行取钱问题、火车票多个售票窗口的问题,通常会涉及到并发的问题,从而需要多线程的技术。当进程中

2021-10-31 19:52:09 8822 1

原创 Java 基础——线程的创建与使用

一、线程的创建方式1、继承 Thread 类① 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。② 创建Thread子类的实例,即创建了线程对象。③ 调用线程对象的start()方法来启动该线程。线程特性:● 线程能被标记为守护线程,也可以是用户线程● 每个线程均分配一个name,默认为(Thread-自增数字)的组合● 每个线程都有优先级(1-10),默认为5。高优先级线程优先于低优先级线程执行。● m

2021-10-27 00:36:00 410

原创 Kafka 入门

一、简介Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 zookeeper 协调和发布/订阅模式的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 hadoop 的批处理系统、低延迟的实时系统、storm/Spark 流式处理引擎,web/nginx 日志、访问日志,消息服务等等,用 scala 语言编写,Linkedin 于2010年贡献给了 Apache 基金会并成为顶级开源项目。

2021-10-16 12:29:07 276

原创 Bert 模型学习

一、Bert 模型BERT 模型的全称是 BidirectionalEncoder Representations from Transformer,基于 Transformer 的双向编码器表示,是一个预训练的语言表征模型,它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言模型进行浅层拼接的方法进行预训练,而是采用新的 masked language model(MLM),以致能生成深度的双向语言表征。BERT 模型的目标是利用大规模无标注语料训练、获得文本的包含丰富语义信息的 Repres

2021-10-15 13:18:18 27971

原创 hugging face 模型库的使用及加载 Bert 预训练模型

一、hugging face 模型库Hugging face 是一个专注于 NLP 的公司,拥有一个开源的预训练模型库 Transformers ,里面囊括了非常多的模型例如 BERT、GPT、GPT2、ToBERTa、T5 等。官网的模型库的地址如下:Hugging face 模型库官网Hugging face 提供的 transformers 库主要用于预训练模型的载入,需要载入三个基本对象:from transformers import BertConfigfrom transformer

2021-10-13 20:50:39 26820 5

原创 Python 的文件执行原理与 main 函数

一、Python 的文件执行原理1、解释性语言通常我们将 Python 和 Java 成为解释性语言,将 C/C++ 成为编译型语言,两者区别如下:(1)编译型(2)解释型2、Python 执行过程python 先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后解释器会从编译得到的 PyCodeObject 对象中一条一条执行字节码指令,并在当前的上下文环境中执行这条字节码指令,从而完成程序的执行。Python 解释器实际上是在模拟操作中执行文件的过程。PyCodeObje

2021-10-13 12:03:27 2756

原创 Python 导入不同文件夹中的文件

在写 python 程序的时候,经常会用到引入其他文件夹里的 py 文件,要是都在同目录下直接 import 就好了,可是有的不在同一个目录,很多时候就直接 import 报错了。下面介绍导入文件的方法:一、导入同一目录下的文件如下图,main.py 和 config.py 文件都在同一个目录。如果要在 mian.py 中导入 config.py,代码如下:import config一、导入不同目录下的文件1、 调用子目录下的文件目录如下:如果要在 main.py 中导入同级目录下的子

2021-10-10 19:55:52 10786 2

原创 Springboot 整合 JMS

ActiveMQJMS 仅支持 Java 平台。由于 JMS 是一套标准,所以 SpringBoot 整合 JMS 必然是整合 JMS 的某一个实现。Apache ActiveMQ 是一个开源的消息中间件,完全支持 JMS 1.1 规范,支持多种编程语言( C、C++、C#、Delphi、Erlang、AdobeFlash、Haskell,Java、Javascript、Perl、PHP、Pike、Python、Ruby )和协议 (OpenWire、REST、STOMP、WS-Notificatio

2021-09-27 10:06:32 1896 1

原创 NLP —— 文本预处理

一、分词简介分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符, 分词过程就是找到这样分界符的过程。举个栗子:工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作==>[‘工信处’, ‘女干事’, ‘每月’, ‘经过’, ‘下属’, ‘科室’, ‘都’, ‘要’, ‘亲口’, ‘交代’, ‘24’, ‘口’, ‘交换机’,

2021-09-14 13:33:32 2169

原创 Linux Ubuntu 下创建 Anaconda 虚拟 python 环境

一般情况下我们每一个 python 项目都尽可能的使用一个独立的 python 环境,这样便于进行包的管理,下面整理一下如何利用 Anaconda 来创建一个干净的 python 虚拟环境。首先系统中需要安装的有anaconda,然后才可以使用 conda 命令。1、输入 conda,进入 conda 环境2、执行创建环境命令conda create --name 环境名称 python==3.7 或者 conda create -n 环境名称 python=3.7 ,此处输入你要创建的环境

2021-09-14 12:38:27 1996

原创 Java —— 日期时间 API

一、java.util.Date在 JDK 1.1 之前, Date 有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和第二个值。 它还允许格式化和解析日期字符串。 不幸的是,这些功能的 API 不适合国际化。 从 JDK 1.1 开始, Calendar 类应该用于在日期和时间字段之间进行转换,并且 DateFormat 类应用于格式化和解析日期字符串。1、构造函数// 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。Date()// 分配一个 Date

2021-09-13 10:59:23 488

原创 Java 基础 —— NIO 学习

一、NIO 简介java.nio 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO)。新增了许多用于处理输入输出的类,这些类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写,新增了满足 NIO 的功能。NIO 以块的方式处理数据,块 IO 的效率比流 IO 的效率高很多。 NIO 是非阻塞的,同时实现了 IO 多路复用。NIO

2021-09-11 22:00:56 400

原创 WebSocket 学习

一、WebSocket 简介1、什么是 WebSocketWebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的应用层的协议。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就创建了持久性的连接,两者之间就直接可以进行双向数据传输。所有浏览器都支持 WebSocket ,目的是在服务器可以在任意时刻发消息给浏览器, 不需要等待浏览器的请求。浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的

2021-09-11 15:54:50 527

原创 各式各样的 session

在 java 中经常会看到各式各样的 session,但是每种 session 表示的类其实是不一样的。1、javax.servlet.http.HttpSession用的最多的是 HttpSession,也叫用户 session,主要用在 JavaWeb 开发中,session 共享,session 超时设置以及验证登录等package javax.servlet.http;import java.util.Enumeration;import javax.servlet.ServletCon

2021-09-10 22:06:16 310

空空如也

空空如也

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

TA关注的人

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