自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA实现延时队列

JAVA实现延时队列

2022-06-07 13:53:25 1272

原创 SVN

svn是一个开放源代码的版本控制系统,它管理着随着时间改变的数据,这些数据存放在一个中央资料档案库中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧版本,或是浏览文件的变动历史。1、SVN简介· repository:源代码库,源代码统一存放的地方。· Checkout:提取,我们可以从源代码库提取代码。· Commit:提交,当修改了代码,我们可以提交到源代码库。· Update:更新,当提取了一份源代码,更新一下就可以和代码库中的源代码同步。如果

2021-02-23 15:16:59 636 1

原创 Git

Git1、Git与SVN的区别Git是一个开源的分布式版本控制系统,它采用了分布式版本库的方式,不用服务器端软件的支持。Git不仅仅是个版本控制系统,它也是个内容管理系统,工作管理系统等。· Git是分布式的,SVN不是;· Git把内容按元数据方式存储,SVN是按文件存储;· Git分支和SVN的分支不同;· Git没有一个全局的版本号,SVN有全局的版本号;· Git的内容完整性要优于SVN,Git的内容存储使用的是SHA-1哈希算法,这能确保代码内容的完整性,确保在遇到磁盘故障和网络问

2021-02-22 17:23:28 181

原创 匹配字符串

有一个字符串s1,和一个子串s2,找出s2在s1中的位置存在则返回s2第一个字符所在的索引下标,无则返回-1代码如下:暴力匹配/** * 暴力匹配算法 * @param s1 * @param s2 * @return */ public static int getStrIndex(String s1, String s2){ int i = 0; int j = 0; char[] c1

2021-01-20 11:12:51 183

原创 三线程打印

三条线程,一条线程打印0,一条打印奇数,一条打印偶数,比如01020304…代码如下:public class MyThread { private int number = 1; public static void main(String[] args) { MyThread myThread = new MyThread(); new Thread(myThread::print, "0").start(); new Thread

2021-01-12 15:43:01 212

原创 微服务网关

微服务网关的主要作用:1.整合各个微服务功能,形成一套系统2.在微服务网关中实现日志统一记录3.实现用户的操作跟踪4.实现限流操作5.用户权限认证操作不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下问题:1.客户端会多次请求不同的微服务,增加了客户端的复杂性2.存在跨域请求,在一定场景下处理相对复杂3.认证复杂,每个服务都需要独立认证4.难以重构,随着项目的迭代,可能需要重新划分新的微服务,例如可能将

2021-01-12 15:28:47 356

原创 分布式事务

1、什么是事务?数据库事务(简称事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成(由当前业务逻辑的多个不同操作构成)。事务拥有四个特性,习惯上被称为ACID特性:原子性:事务作为一个整体被执行,包含在其中的对数据库的操作,要么全部被执行,要么全部都不执行。一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态,一致状态指数据库中的数据应满足完整性约束。除此之外,一致性应满足事务的中间状态不能被观察到。隔离性:多个事务并发执行时, 一个事务的

2021-01-12 10:26:05 263

原创 只出现一次的数字

LeetCode的一道算法题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4代码如下:public int singleNumber(int[] nums) { for (int i = 1; i <nums.length ; i++) { nums[0] ^= nums[i];

2020-11-05 19:06:48 89

原创 有效的山脉数组

LeetCode的一道算法题:给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3在 0 < i < A.length - 1 条件下,存在 i 使得:A[0] < A[1] < … A[i-1] < A[i]A[i] > A[i+1] > … > A[A.length - 1]示例 1:输入:[2,1]输出:fals

2020-11-05 14:29:21 146

原创 整数数组加1

LeetCode的一道算法题:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。代码如下: public int[] plusOne(int[] digits) {

2020-11-05 09:15:10 337

原创 求数组中连续子数组的最大和

LeetCode的一道算法题:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。分析:我们可以假设数组的第一个元素认为是最大和maxSum,定义数组求和变量int sum = 0,则可以依次向后累加数组中其他元素sum += nums[i],如果sum < 0,则将sum = nums[i],因为sum &l

2020-11-04 17:25:49 2436

原创 求整数数组中两数之和为目标值的索引

LeetCode的一道算法题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]代码如下: public int[] twoSum(int[] nums, int target) {

2020-11-04 09:49:26 263

原创 两个数组的交集

LeetCode的一道算法题:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。代码如下: public int[] intersection(int[] nums1, int[] nums2) { //将int数组转成S

2020-11-02 14:11:21 122

原创 根据登录用户名动态获取页面菜单

需求:根据登录的用户角色不同,从数据库获取该用户所拥有的角色菜单,在页面动态展示。首先在前端页面定义一个接受后端数据的数组://菜单数据的数组var menuListArr = [];在vue中给数据模型赋值:menuList: menuListArr, //菜单利用钩子函数向后端发送请求获取数据:created(){ //发送请求获取当前登录用户的用户名 axios.get("/user/getUsername.do").then((res

2020-10-15 20:29:02 6417

原创 HashMap排序题

已知一个HashMap<Integer, User>集合,User有name和age属性,请写一个方法实现对HashMap的排序功能,该方法接收HashMap<Integer, User>为形参,返回类型为HashMap<Integer, User>,要求对HashMap中的User的age倒序排序,排序时key=value键值对不能拆散。 解析:HashMap本身是不可排序的,但是这道题偏偏让给HashMap排序,那我们就得想在API中有没有这样的Map结构是有序的.

2020-10-08 12:15:49 376

原创 Java面向对象的特性

1、继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变素的重要手段。2、封装:通常认为封装是把数据和操作数据的方法绑定起来,只能通过已定义的接口访问数据。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。封装就是隐藏一切可以隐藏的东西,只向外界提供最简单的编程接口。

2020-08-30 18:29:57 850

原创 线程间的交互:生产者,消费者问题

生产者消费者问题,也称有限缓冲问题,是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。有时,当线程进入synchronized块后,共享数据的状态并不满足它的需要,它要等待其他线程将共享数据改变为它需要的状态后才能执行。但由于此时

2020-07-17 15:25:41 215

原创 单例设计模式

单例设计模式可以保证系统中应用该模式的类一个类只有一个实例,即保证一个类有且只有一个对象(实例)。它的好处是,单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。因为类控制了实例化过程,所以类可以灵活更改实例化过程。所有的内容的都是唯一的, 可以用作共享数据来用。在Java语言中,单例模式的要点有3个:1、一个类只能有一个实例,2、它必须自行创建这个实例,3、它必须自行向整个系统提供这个实例。从具体实现角度来说,通常有两种构建方式,我们分别称为饿汉式和懒汉式。其中,懒汉式是

2020-07-16 22:19:13 112

原创 键盘录入字符串,统计里面每个字符串出现的次数

代码演示如下:import java.util.*;public class Test { public static void main(String[] args) { //键盘录入 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String s = sc.nextLine(); //方法一,用ArrayList集合实现

2020-06-30 13:38:15 2473

原创 100个人围成圈报数,如果是14的倍数, 则去掉,问最后留下的是第几个人?

分析:100个人循环报数,如果是14的倍数则移除此人,如此往复,到最后只能留下一人。可以将这100人看做一个集合,如果是14的倍数,则从集合中移除,直到剩下最后一个元素为止。打印集合,获取集合中唯一的元素。代码演示如下:方法一:import java.util.ArrayList;public class Test06 { public static void main(String[] args) {

2020-06-29 15:20:29 654

原创 快排算法

快排的基本思路为先确定出一个基准数(取第一个数为基准数),然后通过与基准数循环比较的方法,将所有比基准数小的数字放在它的左边,所有比它大的数字放在右边,实现一部分数字都比另一部分小。然后再通过此方法对这两部分数据分别进行相同的操作,整个过程可以通过递归实现,最后对所有数字进行排序。代码演示如下:import java.util.Arrays;public class Test { public static void main(String[] args) { //定义一个数

2020-06-29 14:20:39 317

原创 Map统计商品售卖数量

创建HashMap集合,以商品名做键,以售出数量做值循环使用键盘输入商品名称,如果输入“end”表示结束循环不再输入数据如果map中没有这个商品,售卖数量设置为1次如果map中有这个商品,售卖数量加1次遍历map集合,打印商品名称和售卖的数量代码如下:public static void main(String[] args) { System.out.println("请输入商品名称:"); Map<String, Integer> map = getGoods(.

2020-06-01 17:30:30 875 1

原创 冒泡排序、选择排序

冒泡排序原理:相邻元素比较,大的往后放分析:假如有n个元素,则比较n - 1轮第一轮:arr[0]和arr[1]比较arr[1]和arr[2]比较…arr[n-2]和arr[n-1]比较第二轮:arr[0]和arr[1]比较arr[1]和arr[2]比较…arr[n-3]和arr[n-2]比较第三轮:arr[0]和arr[1]比较arr[1]和arr[2]比较…arr[n-4]和arr[n-3]比较…共比较 (n-1) + (n-2) + (n-3) + ··· +

2020-06-01 16:52:41 156

原创 字符串大小写转换

给定一个长度大于10的字符串(1)从字符串中随机获取5次字符,(2)将获取的字符中的大写字符转换成小写字符,小写字符转成大写字符(3)将转换后的字符组合成新的字符串,并将该字符串返回代码如下:public String getStr(String str) { Random r = new Random(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 5; i++

2020-05-25 23:30:25 418

原创 统计字符串中英文字母和数字分别有多少个

请编写程序,由键盘录入一个字符串,统计字符串中英文字母和数字分别有多少个。比如:Hello12345World中字母:10个,数字:5个。 public static Map getCount() { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String str2 = str.toLowerCase();

2020-05-23 21:22:15 4830

原创 随机生成五位数验证码

随机生成五位数验证码,验证码由 4个 (A-Z a-z) 和1个 (0-9)的字符组成,数字固定在最后一位,例如:gAgZ6。代码如下:public String getCode() { char[] arr = new char[26 + 26]; int index = 0; for (int i = 97; i <= 122; i++) { //小写字母 arr[index] = (char) i;

2020-05-12 20:09:49 2635

原创 计算5门课程的平均成绩

键盘循环录入某学生的5门课程的成绩(成绩使用int数据类型)并计算平均分(平均分使用double数据类型)。代码如下:public static double getAveScore(){ Scanner sc = new Scanner(System.in); double sum = 0; int i = 0; while (i < 5){ int score = sc.nextInt(

2020-05-06 21:24:44 4056

空空如也

空空如也

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

TA关注的人

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