自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星空

广州程序员一枚~

  • 博客(213)
  • 资源 (3)
  • 收藏
  • 关注

原创 22道Mysql面试真题和答案

建立一个联合索引(a,b,c),相当于建立多个索引(a)(a,b)(a,b,c)索引排序是从左到右匹配的,即索引查找顺序为 a -> b -> c如果直接查询b,则不符合最左原则,会直接遍历查询所有节点联合索引的优点减少索引树的个数,减小空间开销提高索引查询效率共享表空间:数据库的所有表数据、索引文件都存放在一个文件中,一个表删除了空间不会清除独立表空间:每一个表都存储在不同的文件中,表删除会清除空间幻读是指一个事务多次执行一条查询返回的却是不同的值。

2023-08-30 12:34:36 438

原创 Java数据结构面试题以及答案

B树和B+树的区别?B树和B+树的优点分别是?HashMap和Hashtable的区别?ConcurrentHashMap的原理?ArrayList和LinkedList的区别?String、StringBuilder和StringBuffer的区别?ArrayList和Vector的区别?Collection下有哪些子类?Comparable和Comparator的区别?

2023-08-28 22:44:40 923

原创 如何下载阅读Spring源码-全过程详解

这篇文章记录了下载spring源码和在IDEA中打开运行的全过程,并且记录了过程中遇到的问题和解决方案,适合需要学习spring源码的同学阅读。spring源码下载地址:https://github.com/spring-projects/spring-framework.git

2023-02-22 20:52:43 3415 1

原创 Git实战技巧-日常工作总结

Git使用技巧1.开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支;2.当master代码改动了,需要更新开发分支(dev)上的代码;3.git commit时 忽略contents have differences only in line separators;4.强制覆盖本地代码(与git远程仓库代码保持一致);5.修改commit message

2023-02-18 22:32:12 813 1

原创 MySQL Explain用法及各字段详解

Explain工具介绍使用 Explain 关键字可以模拟 MySQL 优化器执行 SQL 查询语句,并分析出查询语句的相关执行过程。使用方法是直接在 select 语句前,加上关键字 explain,然后执行,就能获取一些优化器执行该 SQL 的信息。使用方法如下:执行结果是下列这一行信息,接下来将详细介绍每一列代表的含义。Explain 中每列含义1.idid 列,代表的是 select 语句执行的id,id 越大代表执行顺序越早,id 最小的最慢执行。例如在复杂查询中:查询结果中

2022-05-15 20:05:16 2270

原创 MySQL索引底层数据结构与算法

什么是索引?索引,其实就是帮助MySQL高效获取数据的排好序的数据结构。索引最形象的比喻就是图书的目录。注意只有在大量数据中查询时索引才显得有意义。在MySQL中,存在多种不同的索引,常见的索引分类如下:按数据结构分类:B+tree索引、Hash索引、Full-text索引。按物理存储分类:聚集索引、非聚集索引(也叫二级索引、辅助索引)。按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。按字段个数分类:单列索引、

2022-05-04 22:52:07 1166

原创 美团技术读后感系列——LruCache原理及实现过程

LruCache介绍LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。

2022-05-02 20:30:09 1397

原创 BitSet解决大数据量处理内存占用大的问题

一、背景  想象一个场景,如果我们有一个需求是要安排工作人员对CSDN发布的文章做人工审核,且每天的审核工作人员可能不一样(因为调班、请假等原因),那么我们就需要记录每天的工作排班,记录当天排班的审核人员账号,存储格式如图的account字段,以逗号分割,代表当天的审核人员的ID。然后我们每天都要对账号进行处理,判断某个工作人员的账号是否在当天的排班当中,来决定是给该工作人员分配审核任务。二、遇到的问题处理账号时,内存占用大  在安排当天的排班时,我们要从MySQL取出账号字符串“1,2,3,4,

2022-04-04 22:35:57 2521 2

原创 TypeError: Cannot set properties of undefined (setting ‘innerHTML‘)

Vue调用本地组件定义的变量,报错TypeError: Cannot set properties of undefined (setting ‘innerHTML‘),可能是回调函数内无法直接访问本地组件变量的原因。以下图片显示的代码,在vue的data -> return中定义了contentList这个变量,但是在回调函数中,console.log(this.contentList),浏览器端报错TypeError: Cannot set properties of undefined (se

2021-11-21 19:04:18 13804 1

原创 接口访问超时 504 Gateway Time-out 优化方案

我们在调用GET请求获取数据的接口中,由于接口的处理逻辑复杂、查询的数据库表过多、nginx设置的超时时间过短和慢sql等原因,会造成接口请求了20秒左右,都没有结果返回,浏览器就会报错504 Gateway Time-out,报错如下:遇到这个问题,可能会有两种情况,一种是网上常说的nginx访问超时时间。设置Nginx超时时间nginx访问出现504 Gateway Time-out,一般是由于程序执行时间过长导致响应超时,例如程序需要执行90秒,而nginx最大响应等待时间为30秒,这样就会出

2021-08-03 22:58:27 9568 3

原创 求数组中k个数的所有组合

/** * 求数组中 k个元素序列 的所有组合 * @param start * @param array * @param length * @param k * @param list * @param used * @param res */ public static void dfs(int start, int[] array, int length, int k, List<Integer> list, boolean[] .

2020-09-27 21:22:24 1399

原创 字符串替换

import java.util.Scanner;public class Main { public static void main(String[] args) { // 模式串中‘?’可以匹配目标串中的任何字符,模式串中的 ’*’可以匹配目标串中的任何长度的串 Scanner scanner = new Scanner(System.in); String pattern = scanner.next(); String input = scanner.next(); pa

2020-09-05 23:19:01 622

原创 BigDecimal 计算余数

Java计算大数据,使用BigDecimal,它提供了很多方法。通过BigDecimal取余:// 返回数组中,第一个元素是商,第二个元素是余数public BigDecimal[] divideAndRemainder(BigDecimal divisor);

2020-09-04 10:30:31 2240

原创 优先级队列——实现二维数组排序

PriorityQueue<Customer> queue = new PriorityQueue<>();class Customer implements Comparable<Customer> { public int num; public int fee; public Customer(int num, int fee) { this.num = num; this.fee = fee;

2020-09-03 21:52:06 849

原创 岛屿数量

class Solution { // 计算岛屿数量 public int numIslands(char[][] grid) { int islandNum = 0; for(int i = 0; i < grid.length; i++){ for(int j = 0; j < grid[0].length; j++){ if(grid[i][j] == '1'){

2020-09-03 09:13:32 151

原创 全排列

package 全排列;import java.util.*;/** * 回溯+深度优先遍历 */class Solution { public static void main(String[] args) { // int数组全排列调用 List<List<Integer>> result = permute(new int[]{1,2,3}); System.out.println(result);

2020-09-03 08:55:56 167

原创 背包问题——动态规划

package pack9jiang; import java.util.Scanner; /** * 使用二维数组非递归的方法求解0/1背包问题 */public class ZeroOnePack { // N表示物体的个数,V表示背包的载重 int N,V; //用于存储每个物体的重量,下标从1开始 private int[] weight; //存储每个物体的收益,下标从1开始 private int[] value; //二维数

2020-09-02 16:50:11 253

原创 螺旋打印二维数组

import java.util.ArrayList;import java.util.List;public class 螺旋打印二维数组 { public static List<Integer> spiralOrder(int[][] matrix) { if (matrix.length == 0) return new ArrayList<>(); if (matrix[0].length == 0) return new ArrayList<>

2020-09-02 10:06:59 428

原创 最大公因数和最小公倍数

import java.util.Scanner;public class 最大公因数最小公倍数 { // 最大公约数 public static int get_gcd(int n1, int n2) { int gcd = 0; if (n1 < n2) {// 交换n1、n2的值 n1 = n1 + n2; n2 = n1 - n2; n1 = n1 - n2; } if (n1 % n2 == 0) { gcd = n2; } whi

2020-09-02 10:06:36 230

原创 折半查找

public class 折半查找 { public static void main(String[] args) { 折半查找 su = new 折半查找(); int[] arr = {1,3,6,9,12,23,33,44,45,67,78,98,100,111,123,1234,2345,9999,11111,12345,666666,900000}; int res = su.binarySearch(arr, 78); S

2020-09-02 10:02:42 158

原创 快排

public class 快排 { /* * 快速排序 * * 参数说明: * a -- 待排序的数组 * start -- 数组的左边界(例如,从起始位置开始排序,则start=0) * end -- 数组的右边界(例如,排序截至到数组末尾,则end=a.length-1) */ private void quick_sort(int a[], int start, int end) { if (start < end) { int

2020-09-02 10:01:59 124

原创 归并排序

public class 归并排序 { public static void main(String[] args) { int[] arr = new int[]{3,2,5,1,6,7,8,0,20}; sort(arr, 0, 8); System.out.println(arr); } public static int[] sort(int[] a,int low,int high){ int mid = (low+high)/2; if(low<high){

2020-09-02 10:01:24 91

原创 子集

import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class 子集 { // 返回子集的某个元素 public static void sort(int n,int s,String str, List<String> result) { StringBuilder builder = new StringBuilder(); for(int i=0;i<n

2020-09-02 10:00:56 131

原创 回溯

import java.util.ArrayList;import java.util.List;public class 回溯 { /** * 回溯算法模板 * * @param start 开始回溯的位置 * @param target 目标值 * @param candidates 待回溯数组 * @param result 结果集 * @param list 结果集子集 */ private void backTrack(int start, int tar

2020-09-02 10:00:23 117

原创 二叉树前中后序遍历

public class 二叉树前中后序遍历 { public static void main(String[] args) { } // 前序遍历 public void preOrderTraverse1(TreeNode2 root) { if (root != null) { System.out.print(root.val + "->"); preOrderTraverse1(root.left); preOrderTraverse1(root.righ

2020-09-02 09:59:54 144

原创 KMP字符串匹配

参考文章:https://www.cnblogs.com/Yintianhao/p/9996524.htmlpublic class KMP字符串匹配算法 { /** * 求出一个字符数组的next数组 * @param t 字符数组 * @return next数组 */ public static int[] getNextArray(char[] t) { int[] next = new int[t.length]; next[0] = -1; next[1] =

2020-09-02 09:58:21 126

原创 Redis数据结构、持久化、缓存技术和集群详解

redis是什么?是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库能干嘛?主要是用来做缓存,但不仅仅只能做缓存,比如:redis的计数器生成分布式唯一主键,redis实现分布式锁,队列,会话缓存,点赞,统计网站访问量。去哪下?官网,也可以通过Linux yum直接下载安装怎么玩?1.安装2.redis数据类型(api操作)3.redis配置文件解析4.redis的持久化5.redis的事务6.re

2020-07-05 17:06:50 424

原创 动态规划套路解决戳气球问题

题目有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明你可以假设 nums[-1] = nums[n] = 1,但注意它们

2020-06-03 20:04:39 537

原创 腾讯2020校园招聘后台开发面试编程题

腾讯一面的时候,面试官给出了一道题,题目如下,当初由于是第一次面试,比较紧张没做出来,现在回顾总结一下。题目小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住)输入描述输入第一行将...

2020-04-14 13:54:21 933

原创 理解包装类 Integer 的底层实现,教你破解所有面试难题!

Integer 是最常用的包装类之一,面试官特别喜欢结合 equals() 和 == 来问问题。那么 Integer 究竟应该怎么学才算是掌握呢?应该掌握哪些知识点呢?简单介绍首先先聊一下什么是包装类。在Java中有 8 大基本数据类型,每个数据类型都有对应的包装类,包装类的作用就是将数据封装成类和对象,同时赋予了包装类很多实用的方法来操作这些数据,一句话总结就是,包装类提供了处理基本数据类...

2020-03-30 20:38:40 737

原创 ConcurrentHashMap 底层原理,你真的理解了吗?

ConcurrentHashMap 是 HashMap 的线程安全版本,与之前版本的ConcurrentHashMap实现来看,java 8中做了较大调整,本文仅分析java 8的实现,java 8 之前的实现暂不做分析。简单介绍为了更好的导入本文,首先展示一下ConcurrentHashMap的结构,请看下面的图片:和 HashMap 一样,ConcurrentHashMap 使用了一个...

2020-03-27 16:57:30 650

原创 学透 LinkedList 底层实现原理,狂虐面试官!

前言:面试时被问到 LinkedList 的底层实现,瞬间哑口无言,所以决定狠狠地啃一下Java源码,目标就是吊打面试官!好了,废话不多说。简单介绍

2020-03-26 11:01:40 837 2

原创 小学生也能看懂的ArrayList底层原理

简单介绍ArrayList是 Java 集合框架中比较常用的数据结构,底层基于数组实现,能够实现容量的动态变化。我们之所以使用它,与它能够自由添加、删除元素有关,使用者不用考虑数组的容量、遍历等问题,可以说是一个功能强大、使用简单的数组。那么ArrayList里面到底是怎么实现的呢?ArrayList的成员变量了解一个类,我们需要先了解它有哪些变量,通过这些成员变量我们能够大致了解它的实...

2020-03-25 21:16:05 235

原创 千万级测试String、StringBuffer和StringBuilder的速度

面试是经常被问到String、StringBuilder和StringBuffer三者的速度有什么区别,经过测试后,这三者的执行速度关系是:StringBuilder > StringBuffer > String,测试过程如下:public class TestStringTools { public static void main(String[] args) { ...

2020-03-25 10:18:28 555

原创 HashMap遍历有序性问题——map.entrySet()的无序性

在LeetCode刷题的时候,在一道返回 字符串中最早出现的只出现一次的字符下标的题目中,使用大HashMap的遍历方式,我选择了使用map.entrySet()获取节点集合的方式进行遍历。题目和代码如下:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)本来以为越早插入的数据...

2020-03-18 22:01:11 4064 2

原创 【CVTE Web后台开发实习生 线下面试】总结

这是本人的第一次面试,面试体会如下:先问项目,项目写的技术问个遍然后会根据你自己的技术栈,也就是你简历上有写的技术,如果前面的表现比较满意的话,都会问一遍。注意,尽量不要说着说着说到自己不擅长的领域,面试官会从这些领域再找问题问(比较有把握答上的话,可以往外拓展)项目问到的印象比较深的问题:慢SQL日志,mybatis的$和#(回答的不好),redis持久化,怎么解决跨域问题另外的问题...

2019-12-17 20:09:51 398

原创 静态代码块、非静态代码块和构造方法

执行顺序:静态代码块 > 非静态代码块 > 构造方法示例:public class Test { { System.out.println("not static run"); } static { System.out.println("static run"); } public Test() { System.out.println("constru...

2019-12-07 11:28:24 234

原创 【CVTE Web后台开发实习生2019.12.05在线笔试】总结

本次在线笔试题型:23道选择题(单选和不定项选)、2道在线算法编程题、1道问答题。选择题主要考了一下知识点:数组的二分查找;线程间通信机制(notify、wait()、yield()等);图论(连通性);java8新特性Stream;jvm的垃圾收集器(各种垃圾收集器的作用、能不能一起使用、新生代老生代等);ARP协议和RARP协议。算法题两道编程题:1、求买入和卖出股票...

2019-12-05 22:30:32 475

原创 mysql中 for update 使用

for update是在数据库中上锁用的,可以为数据库中的行上一个排它锁。当一个事务的操作未完成时候,其他事务可以读取但是不能写入或更新。例子:比如一张表三个字段 , id(商品id), name(商品名字) , count(数量)当商品抢购时候会显示剩余商品件数,如果并发量大的时候,商品自减的值可能不准确。所以当我们在一个事务中对count字段进行修改的时候,其他事务应该只能读取指定id的...

2019-12-02 20:37:35 254

原创 如何合理地建立 Mysql 索引

前言索引基础知识建立索引alter table table_name add index (index_name);删除索引ALTER TABLE table_name DROP INDEX index_name;查看表中的索引show index from table_name;如何优化SQL语句?SQL语句优化的思路:先看表的数据类型是否涉及得合理,有没...

2019-12-02 13:25:52 191

冒泡排序及三种优化方式代码

此资源是本人演示冒泡排序及其优化方案的示例代码,欢迎大家下载。关于冒泡排序的介绍,也可以参考本人博文https://blog.csdn.net/Abel_Liujinquan/article/details/88880483

2019-03-28

《Java核心技术+卷1:基础知识(原书第9版)》

一直以来,《Java核心技术》都被认为是面向高级程序员的经典教程和参考书,它内容翔实、客观准确,不拖泥带水,是想为实际应用编写健壮Java代码的程序员的首选。

2019-03-21

空空如也

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

TA关注的人

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