自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java 集合框架系列(五):Queue 接口及其实现类

Queue队列,也是Collection的一个重要分支,是一个先进先出的数据结构,其一个重要的子接口为BlockingQueue(阻塞队列),阻塞队列在多线程的场景中有着广泛的应用,平时用的队列可以直接使用LinkedList来使用。...

2022-07-22 13:30:00 849

原创 Java 集合框架系列(四):Map 接口及其实现类

LinkedHashMap继承HashMap,可以在HashMap的基础上实现顺序的访问,其底层使用了双向链表+HashMap来实现。HashMap是JDK1.2版本之后开始增加的,在1.8版本之前其底层使用数组+链表的方式来作为哈希表的存储结构,在1.8版本及之后改成了数组+链表/红黑树的方式来作为哈希表的存储结构,当链表的长度大于8的时候会将链表转换成一颗红黑树。用于存储键值对,是一个接口,其常见的实现类有HashMap、Hashtable、TreeMap等。......

2022-07-22 08:54:52 497

原创 Java 集合框架系列(三):Set 接口及其实现类

否则会在编译阶段就抛出错误。使用HashMap作为底层数据结构存放数据,HashSet中将要存放的数据作为HashMap的Key,HashMap中的value为一个在HashSet中定义的所有value共享的Object对象。其实现是在HashSet的基础上多了一个总链表,将放入的元素串在一起,方便有序的遍历。Set,数学意义上的集合,指的是结构数据唯一、数据存储无序、没有跟索引相关的方法,不能用普通的for循环遍历,必须使用迭代器遍历或者增强for循环遍历的数据结构。......

2022-07-22 08:41:37 454

原创 Java 集合框架系列(二):List 接口及其实现类

继承Collection接口的一个接口,用来表示传统的线性表的结构,实现该接口的结构存储的数据不唯一(值不唯一,类型是唯一的),数据按照添加的顺序进行排列。其他操作和Vector差不多,主要是扩容机制不太一样,ArrayList没有扩容因子,其在一般情况都是扩容当前长度的1/2的大小。底层用数组存储,与Vector相比,ArrayList的操作不是线程安全的,其他基本与Vector相同。底层用数组存储,里面的方法都是线程安全的,现版本基本被抛弃了,锁的粒度比较大,性能低,不建议使用。...

2022-07-22 08:36:11 445

原创 网络 IO 模型的演化过程

用户线程发生系统调用会去读取Socket缓冲区的内容,如果此时Socket缓冲区没有数据,则会阻塞用户线程,直到Socket缓冲区有数据之后唤醒用户线程,用户线程负责将Socket缓冲区的内容拷贝到用户空间中,这个过程用户线程也是阻塞的。阻塞的意思意味着用户线程要去等待Socket缓冲区的数据,而异步的意思意味着数据从用户态拷贝到内核态不是由用户线程执行的,既然数据的拷贝不是由用户线程进行的,那么用户线程的等待就没有意义了。其演变过程的原则是如何用尽可能少的线程去处理更多的连接。...

2022-07-15 07:50:01 560

原创 Java 集合框架系列(一):集合框架整体概述

Java 中的集合框架帮助我们实现了很多数据结构,可以直接拿来使用,下面是常用数据结构接口的概述。

2022-07-03 18:04:33 321

原创 Git常用命令

GitGit:分布式版本管理系统。对于一个受Git管理的仓库,其各个状态的示意图如下:工作区:本地项目目录。暂存区:执行了add命令之后会将修改的代码存放到暂存区中。本地仓库:执行了commit命令之后会将代码放入本地仓库中,即项目的**.git**目录下。远程仓库:远程的代码仓库,只有在本地仓库中的代码执行了push之后才会提交到远程仓库。 常用命令# 修改内容添加到暂存区git add . or git add filename# 将暂存区的内容提交到本地仓库,每次

2022-04-17 18:30:47 335

原创 使用uwsgi + flask部署web应用

Flask:Flask是一个使用 Python 编写的轻量级 Web 应用框架。《百度百科》uWSGI:是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。《百度百科》虽然Flask项目本身也可以直接运行,部署成一个web服务,但是这种方式在开发过程中比.

2022-04-05 16:08:50 4269

原创 Ubuntu20.04安装chrome和chromedriver

安装chrome使用wget下载最新的.deb软件包wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb更新软件包sudo apt-get update安装chrome(用户需要有sudo特权)sudo apt install ./google-chrome-stable_current_amd64.deb查看是否安装成功google-chrome --version

2022-03-19 10:54:07 7317 1

原创 Java中的锁之synchronized关键字

Java中的锁​ 所谓锁是用来控制多个线程访问共享资源的方式,所以锁在Java中并不仅仅指代的就是Java中的对象,例如自旋锁用的就是指令的方式。通常的,一个锁能够防止多个线程访问共享资源(也称为临界区)。​ 在JDK5之前,Java中的锁是通过关键字synchronized来实现的,而在JDK5之后Lock接口的出现使得锁的使用更加的灵活。同时在JDK6开始对synchronized关键字进行了锁升级的优化,使其能够适用于更多的场景,不再是严格意义上的重量级锁。 synch

2022-01-16 16:11:36 1221

原创 WebSocket协议介绍与使用

WebSocket协议    WebSocket协议是一种网络通信协议,是HTML5之后提出的一种在单个TCP上进行全双工通讯的协议。可以使服务端主动的向客户端发送消息,常用于推送服务。其特点如下:HTTP协议(1.0)是单向的没有连接状态的协议,客户端浏览器为了获取服务器的动态变化信息,需要配合JavaScript和AJAX进行不断的异步轮询请求,需要不断的建立连接,非常耗费资源。WebSocket能够使任一方主动的建立起连接,并且连接只要建立一次就一

2022-01-08 22:29:31 2688

原创 Java垃圾回收

前言Garbage Collection,GCGC只在堆和本地方法区中起作用。 一、确定对象存活1.1 引用计数法    在对象中添加一个引用计数器,每当有一个地方引用该对象的时候,计数器的值就加1;当引用失效的时候计数器的值就减1;计数器的值为0的对象就是不再被使用的对象。python就是使用这种方式管理内存的。这种方式无法解决循环引用的问题,Java中不使用这种方式判断一个对象是否存活。    1

2022-01-06 15:47:21 490

原创 ThreadLocal原理及使用场景

ThreadLocal​ ThreadLocal意为线程本地变量,用于解决多线程并发时访问共享变量的问题。​ 所谓的共享变量指的是在堆中的实例、静态属性和数组;对于共享数据的访问受Java的内存模型(JMM)的控制,其模型如下:【参考:《Java并发编程的艺术》P22】每个线程都会有属于自己的本地内存,在堆(也就是上图的主内存)中的变量在被线程使用的时候会被复制一个副本线程的本地内存中,当线程修改了共享变量之后就会通过JMM管理控制写会到主内存中。​ 很明显,在多线程的场景下,当有多个线程对共享

2022-01-02 19:58:43 71715 10

原创 汇编语言(二)寻址方式

8086指令体系总共有7种寻址方式,详细如下:立即数寻址mov ax, 3069H直接将值为3069H的立即数放到ax中。寄存器寻址mov AL, BH将BH寄存器的值放入AL中。寄存器间接寻址使用BX寄存器进行间接寻址,BP,BI,DI寄存器也行。mov ax, [bx]将bx保存的值当做偏移地址,这里假设为2000H,再到DS:2000H号单元中取出值放到ax中。tips:注意在通用寄存器组中只有bx能够进行间接寻址,AX、CX、DX不行。寄存器相对寻址操作数的有效地址为

2021-06-19 15:42:11 2800

原创 redis(六)哨兵模式

前言Redis中的主从复制模式实现了读写分离,以及断线重连之后的数据一致性,但是并没有解决主机宕机时候出现的故障问题,Redis中使用哨兵模式来解决主机宕机问题。哨兵模式哨兵(sentinel)是一种运行在特殊模式下的Redis服务器,是Redis实现高可用的方案。由一个或者多个哨兵组成的哨兵系统可以用来监控一个或者多个主服务器,以及该主服务器下的所有从服务器。哨兵模式Redis服务器结构举例:哨兵系统的主要作用是在主服务器宕机时进行故障排查,根据一定策略将从服务器指定为新的主服务器。补充:哨兵

2021-05-29 19:56:26 434

原创 redis(五)主从复制

主从复制  Redis中可以将一台服务器设置主机,别的服务器设置成从机,实现主从模式。在Redis的主从模式下主服务器只能写数据,从服务器只能读数据。Redis的主从模式会将主服务器中的所有数据会通过写时复制技术备份到从服务器中,从而保证主从服务器之间的“数据一致性”。关键词:主机:master - 写数据从机:slaver - 读数据将一台服务器设置为从服务器的命令为:localhost:6380>slaveof master_ip port# 例如:slaveo

2021-05-29 19:47:12 369

原创 Nginx转发https请求访问http后端接口

Nginx转发https请求问题描述前后端分离项目,前端使用Nginx部署,后端是Spring Boot项目,使用tomcat部署。Nginx配置了SSL,并且前端项目需要https协议访问。后端接口任然使用http访问。前后端项目部署在同一个服务器中。当在前端中直接用http协议访问后端的接口可能出现的问题如下:问题原因,因为前端是使用了https,所以经过前端访问后端接口是也要用https协议进行访问。但是Spring Boot项目在没有做多额外的SSL配置或者请求转发的情况下不能直接

2021-05-27 19:39:35 15150 7

原创 redis(三)Redis的事务和锁机制

redis(三)Redis的事务和锁机制事务Redis中的事务可以用来一次执行多条指令,并且有如下两个性质:事务是一个单独隔离的操作,事务中的所有命令都会被序列化,并顺序执行,事务在执行的过程中不会被其他客户端发送过来的命令请求所打断。事务是一个原子操作,要么全部执行,要么全都不执行(不管执行成功与否)。这与mysql中的有所区别。相关命令:命令作用multi开启一个事务,并将之后的命令放到事务队列中 – 组队阶段exec执行一个事务,按照顺序执行 – 执行阶段

2021-05-27 15:50:42 235 1

原创 Redis(二)Redis6新数据类型

Redis(二)Redis6新数据类型与Spring Boot的整合新数据类型Redis6之后增加了三种新的数据类型,Bitmaps、HyperLogLog、Geographic。Bitmapsbitmaps(位图)严格上讲并不是新的一种数据类型,而是定义了字符串类型面向位的一组操作。通过在不同位上设置0或者1来存储不同的状态。创建位图对象的命令localhost:6379>setbit key offset valueoffset为偏移量,表示要将哪一位设置成0/1。获取某一

2021-05-27 15:47:53 218

原创 Shiro笔记(一)

Shiro笔记(一)前言:Shiro是一个权限管理工具!权限管理  现在企业应用中,基本上涉及到用户参与的系统都要进行权限管理,权限管理用来控制不同的用户角色对系统的访问权限,按照安全规则或者策略控制用户能够访问的资源。权限管理属于系统安全的范畴。权限管理包括两部分:身份认证 Authentication判断一个用户是否为合法用户的处理过程,最简单的方式就是我们常常使用的账号密码登录的方式。其他的身份认证方式还有例如指纹解锁,硬件key刷卡等。授权 Authoriz

2021-04-11 23:36:29 250

原创 spring boot(二)容器的使用

Spring Boot容器的使用组件添加@ConfigurationSpring Boot不再使用beans.xml的方式进行bean对象的注入,而是可以使用@Configuration注解的方式来将一个类声明成配置类,该类的作用就相当于beans.xml配置文件。@Configurationpublic class Configs {}@Bean在使用@Configuration注解的配置类中可以在方法上使用@Bean注解,将该方法的返回对象注入容器中。@Configurat

2021-03-29 09:27:24 236 4

原创 spring boot(一)依赖管理

Spring Boot基础介绍Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特有的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种快速配置的方式,Spring Boot在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。特有的配置方式:使用yml或者properties配置文件进行所有场景的配置(例如spring mvc,mybatis等场景的配

2021-03-29 09:25:50 516 6

原创 java开发利器(1)一lombok

lombok前言  封装是java语言中的三大特性之一,最常见的封装可能就是我们要将实体类中的属性使用private修饰符进行修饰,然后书写相应的公共访问器(get方法),修改器(set)方法。像这些方法的书写基本都是固定的,有的就是改一下名称啥的。  记得刚开始学的时候很快就厌烦了写这些相同的代码,之后发现了一些集成开发环境中能够通过快捷键自动生成,也减少了一定的代码量的书写。但是到了后面随着编写项目实体类的增加发现这些快捷键按多了也烦了。 &nb

2021-03-20 22:49:59 282

原创 汇编语言(一)- 寄存器的作用

汇编语言(一)- 寄存器80x86寄存器组80x86是Intel一系列cpu的代称,其中8088,8086,80286为16位cpu,80386为32位寄存器。其体系如下:备注:通过寻址的方式可以使8088的最大寻址为1MBcpu中的寄存器可以分为程序可见和程序不可见,汇编语言操作的就是程序可见的寄存器,程序不可见的寄存器为系统所使用。下面以80x86中16位的cpu为例展示其程序可见的寄存器:程序可见的寄存器共分为:8个通用寄存器,2个专用寄存器,4个段寄存器共14个。其体系大致如下:

2021-03-14 14:31:29 2246

原创 RabbitMQ笔记(一)

RabbitMQ笔记(一)MQMessage Queue 消息队列,也称消息中间件,是一个以队列这种“先进先出”的基本数据结构为基础的软件。其遵守java中JMS规范,通过提供接口的方式进行不同服务之间的消息传递,其消息传递的方式大致如下: 下面简单提一下在本次笔记中可能用到的一些消息中间件概念的来源,其中很多概念都是来自JMS规范的。详情可以看博文JMS消息服务JMS规范及原理详解。JMS规范(可跳过)Java Message Service java消息服务应用程序接口,是一

2021-03-12 16:35:03 192 1

原创 java私有构造器的几个用途

引言:在java中一个类的构造方法一般都是公共的public,毕竟你创建类就是为了能够让别人声明出该类的一个实例对象,如果使用private对构造方法进行修饰的话就使用者就无法通过构造方法创建该类的一个实例对象了。但是私有的构造方法仍然有其用途。具体可以使用在下面几个方面:1. 用在工具类中在java.lang.Math类中可以看到如下代码private Math() {}并且在Math类中没有其他构造方法,因此用户无法自己创建一个实例化的Math对象。从Math类的源码中可以发现里面的成员属性

2020-12-30 18:21:07 1921 3

原创 java注解

注解注解的概念  Annotation 注解 可以看成是java中的一种标记记号,用来给java中的类,成员,方法,参数等任何程序元素添加一些额外的说明信息,同时不改变程序语义。注解是用来告诉编译器一些事情,例如使用@Override注解,可以告诉编译器这个父类方法被子类方法覆盖了。  注解也称元数据,在层次上与类,接口,枚举同一层级(在这里我们可以称这些都是类型)。其声明是用@interface,类似于类用class,接口用interface, 枚举用enum

2020-11-12 23:34:55 119

原创 IDEA Mave工程Mybatis找不到映射文件

使用mybatis时报如下异常:org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error may exist in cn.net.smrobot.dao/UserDao.xml### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cau

2020-11-11 20:22:02 570

原创 java File类的使用方式及示例

FIle类  学习IO操作之前先来看看File类,这是一个对文件操作的类,并不涉及到文件的写入和输出,就跟我们平时在UI界面中操作文件一样,新增文件,删除文件等。(文件夹也是类似的),File类中的常用操作如下:新建文件删除文件新建文件夹删除文件夹判断是否为文件夹判断是否为文件注:我们人也是要判断才能进行下一步操作的,例如是文件直接打开,是文件夹点击进入查看里面的内容。而文件是硬盘的最小单元,所以我们最终操作的都是文件。  File类即是文件

2020-10-28 19:12:32 189

原创 java网络编程入门之UDP协议

相关基础概念计算机网络  是指将地理位置不同,功能独立的多台计算机及其外部设备通过通信的方式连接起来,在网络操作系统,网络管理软件和网络通信协议的协调管理下,实现资源信息共享的计算机系统。通信连接的方式即可以是无线的,也可以是有线的。 网络编程三要素  所谓网络编程就是使用代码(编程语言)进行不同计算机之间的通信。一.IP地址  就是指每台计算机的唯一标识,就跟我们的手机电话号码一样,独一无二,通过IP地址,就可以

2020-10-27 22:23:00 314

原创 LeetCode刷题第17天之《3 无重复字符的最长子串》

LeetCode3 无重复字符的最长子串子串指的是连接在一起的子字符串,而子序列可以不用每个元素都挨在一起,只要满足元素的优先顺序即可。例如:pwwkew,其没有重复的子串可以是wke,kew,但是其没有重复的子序列可以是pwke。题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例示例1:输入:“abcabcbb"输出:3解释:解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例2:输入:“bbbbb”输出:1解释:因为无重复字符

2020-10-12 12:45:07 98

原创 LeetCode刷题第16天之《239滑动窗口最大值》

LeetCode239滑动窗口最大值滑动窗口:这个概念应该是起源于计算网路的滑动窗口协议,是用来控制流量的。而在算法题中,滑动窗口的技巧常用在字符串和数组中得出子串或者子数组的一些极值的操作,关于滑动窗口更加形象的题目可以看leetCode上《和为s的连续正数序列》。题目描述定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度上解决此题吗?

2020-10-11 09:41:51 170

原创 LeetCode814算题第15天二叉树系列值《814 二叉树剪枝》

LeetCode814 二叉树剪枝剪枝:剪枝顾名思义就是对一棵树进行修修剪剪,现实中我们对树进行修剪的目的是为了让其更好看,而在程序中对二叉树进行操作也是如此的,在程序中所谓的“好看”即是可以减少算法的时间复杂度。剪枝好像在决策树,机器学习过度拟合等领域都有用到,但是我并不了解剪枝在真正场景中的使用,仅仅只是在做题的角度上有所了解(害)。题目描述给定二叉树根节点root,此外树的每个结点的值要么是 0,要么是 1.返回移除所有不包含1的子树的原二叉树节点x的子树包含节点x本身和所有x的后代

2020-10-09 13:17:56 119

原创 leetCode刷题14天二叉树系列之《 110 平衡二叉树判断》

leetCode 110 平衡二叉树判断题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例给定二叉树 [3,9,20,null,null,15,7]​ 3​ / \9 20​ / \​ 15 7返回 true给定二叉树 [1,2,2,3,3,null,null,4,4]​ 1

2020-10-08 23:02:59 136

原创 ubuntu64位下安装JDK及踩的坑

  由于最近学习需要,要在Linux下安装java的编译器(javac),没想到一个简单的安装操作也遇到了很多问题。1.网络问题 &nsbp;首先是虚拟机上连不上网络,如果不是校园网的话,在 虚拟机-> 网络适配器->网络连接模式中选择桥式模式,并且√上“复制物理网络连接状态”,看网上说如果是校园网的话要选择NAT模式,没有试过,如下图:2.cpu架构问题  具体安装时是看《Linux之Ubuntu18.04安装java》该博文

2020-10-04 19:38:29 403

原创 leetcode刷题第13天二叉树系列之《98 BST及其验证》

98 BST及其验证BST即二叉binary search tree,二叉搜索树,也有称为是二叉排序树的,当对其使用中序遍历的时候可以得到一个递增的序列。 题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例输入:2/ 1 3输出:true输入:​ 5/ \1

2020-10-03 17:00:02 126

原创 LeetCode刷题第12天二叉树系列之《104 二叉树的最大深度》

LeetCode 104 二叉树的最大深度题目描述给定一个二叉树,找出其最大深度二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。题目解析  对于学过数据结构的可能这道题很快就能使用递归的方式写出来了。树的深度也就是树的高度,计算的时候一般可

2020-10-02 17:19:33 117

原创 LeetCode刷题第11天字符串系列之《 58最后一个单词长度》

LeetCode 58最后一个单词长度题目描述给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例输入: “Hello World”输出: 5题目解析按照题目的意思,反正就是找到最后一个有字母的单词的长度(当然拼写正不正确不是我们管的)。那么从后往前开始遍历,统计字符的个数,遇到空格

2020-10-01 18:39:40 135

原创 LeetCode刷题第10天字符串系列之《125回文串验证》

LeetCode 125回文串验证关于回文串,最早好像是在学校教C语言的时候就让我们写过类似的题目了,不过当时并没有考虑效率什么的,给出的字符串也只是全是字母。回文串:从左往右和从右往左看是一样的,例如:abba。题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串要注意的是本题中只考虑字母和数字,所以可能存在其他字符需要先排除掉。示例输入: “A man, a plan, a canal: P

2020-09-30 18:35:00 144

原创 使用jackson解析json数据详讲

Java操作json数据json 简介概念  JSON:JavaScript Object Notations,即javaScript的对象表示法,是javaScript语法的一个子集,相当于javaScript中的一个对象。虽然json起源于javaScript,但是很多语言都支持json数据格式的解析与生成,是一种文本数据格式,官方的MIME类型是:application/json。  应用场景常用在使用javaScript,java,node.js

2020-09-30 11:51:59 3403

jquery文档.zip

Jquery对应是说明文档,里面包括三个资源,都是1.x版本的api文档,可方便本地查找,需要的朋友自行下载看看

2020-08-01

jquery版本.zip

这是JavaScript框架,JQuery的各种版本及其使用说明,资源是从课程中来的,有需要的朋友可以自行下载

2020-08-01

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

TA关注的人

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