自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 58集团2021秋招正式批笔试

第一题:找每个字符串数组都出现的字符串import java.util.ArrayList;import java.util.HashSet;public class Test58_01 { public ArrayList<String> findCommonString(ArrayList<ArrayList<String>> values) { if(values.size()==0) return new ArrayList<>()

2020-08-31 22:25:32 194

原创 八大排序算法详解

1、冒泡排序(Bubble Sort)**> 冒泡排序 是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两 个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的 元素会经由交换慢慢“浮”到数列的顶端。>> > - 1.1 算法描述> - 步骤1: 比较相邻的元素。如果第一个比第二个大,就交换它们两个; > - 步骤2: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后

2020-08-14 19:09:48 346

原创 科大讯飞2021提前批笔试题

第一题:零钱兑换题目描述:给1,5,10,50,100面额的一定数量的钱,给你一个总金额amount,用他们组合成这个数同时用的钱数量最少。题解:动态规划 public static int GetCoinCount (int[] coins, int amount) { int[] dp=new int[amount+1]; Arrays.fill(dp,amount+1); dp[0]=0; for(int i=0;i<=

2020-08-14 16:02:33 993

原创 Shopee2021校招笔试题

第一题:连续子数组的最大和原题连接:剑指Offer 42题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。解题思路:动态规划public static int maxSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0; int len = nums.length; i

2020-08-14 15:27:40 1133 1

原创 BiliBili2021秋招笔试题

第一题:数24点原题见:679. 24 点游戏题目描述:你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。思路:回溯法public class Main { public boolean Game24Points (int[] arr) { ArrayList<Double> A=new ArrayList<>(); for(int a:arr) A.add((double) a)

2020-08-14 14:33:33 1283

原创 BiliBili2020校招笔试题

第一批最小操作次数题目描述:给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。你总共三种操作方法:插入一个字符删除一个字符替换一个字符输入例子1:abcabd输出例子1:1例子说明1:把c->d,只需要一次操作题解:与leetcode1143一致,找到两个字符串最长公共子序列即可。import java.util.Scanner;/** * 题目:将字符串a变成b,可以执行三种操作插入、删除、修改,求最少操作数 */p

2020-08-13 16:49:59 1391

原创 一步步带你看清MySQL索引为什么是B+树?

首先从二叉查找树开始说起:二叉查找树的性质是:1、任意节点左子树不为空,则左子树的值均小于根节点的值;2、任意节点右子树不为空,则右子树的值均大于于根节点的值;3、任意节点的左右子树也分别是二叉查找树;4、没有键值相等的节点;二叉查找树的平均查找速度比顺序查找更快。但其有局限性:一个二叉查找树是由n个节点随机构成,所以,对于某些情况,二叉查找树会退化成一个有n个节点的线性链。【退化为链表,性能大大下降】于是有了AVL树:二叉平衡查找树的性质是:所有节点的左右子树高度差不超过1。解决了

2020-08-07 16:54:20 135 1

原创 condition的应用举例

题目描述:多线程之间按顺序调用,实现 A-> B -> C 三个线程启动,要求如下:A打印3次,B打印5次,C打印7次紧接着A打印3次,B打印5次,C打印7次…来3轮解决办法:ReentrantLock+Conditionimport java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLoc

2020-08-06 15:45:43 185

原创 单例设计模式

方法一:饿汉式—静态常量方式(线程安全)public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }方法二:饿汉式—静态代码块方式(线程安全)public class Singl

2020-08-06 14:21:34 72

原创 生产者消费者模式

import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;//资源类class ShareData{ private int number=0; private Lock lock=new ReentrantLock(); private Condition conditi

2020-08-06 14:17:03 79

原创 阻塞队列

Queue接口在Queue接口中,除了继承Collection接口中定义的方法外,它还分别额外地定义插入、删除、查询这3个操作,其中每一个操作都以两种不同的形式存在,每一种形式都对应着一个方法。add方法在将一个元素插入到队列的尾部时,如果出现队列已经满了,那么就会抛出IllegalStateException,而使用offer方法时,如果队列满了,则添加失败,返回false,但并不会引发异常。remove方法是获取队列的头部元素并且删除,如果当队列为空时,那么就会抛出NoSuchElementE

2020-08-06 11:16:05 208

原创 基于AQS的应用

ReentrantLock//继承于AQSpublic class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 7373984872572414699L; /** Synchronizer providing all implementation mechanics */ private final Sync sync;

2020-08-05 16:38:18 236

原创 好好理解下ReentrantReadWriteLock

public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable { private static final long serialVersionUID = -6992448646407690164L; /** 内部类提供读锁 */ private final ReentrantReadWriteLock.ReadLock readerLock; /** 内部

2020-08-05 14:58:09 92

原创 简单聊聊AQS

概述AQS核⼼思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的⼯作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占⽤,那么就需要⼀套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是⽤CLH队列锁实现的,即将暂时获取不到锁的线程加⼊到队列中。CLH(Craig,Landin,and Hagersten)队列是⼀个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQS是将每条请求共享资源的线程封装成⼀个CLH锁队列的⼀个结点(Node)来实现

2020-08-05 14:40:56 183

原创 不安全集合类

视频学习地址:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)集合类不安全之ListArrayList线程不安全举例:public class test02 { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 30; i++) { new

2020-08-05 11:07:15 134

原创 四种线程池类

Java中四种具有不同功能常见的线程池。他们都是直接或者间接配置ThreadPoolExecutor来实现他们各自的功能。这四种线程池分别是newFixedThreadPool,newCachedThreadPool,newScheduledThreadPool和newSingleThreadExecutor。这四个线程池可以通过Executors类获取。newFixedThreadPool通过Executors中的newFixedThreadPool方法来创建,该线程池是一种线程数量固定的线程池。

2020-08-04 21:44:47 629

原创 Spring面试题

Spring事务实现原理Spring事务采用AOP的方式实现,就是通过一个动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。...

2020-08-04 21:34:47 172

原创 Redis面试题

1、Redis简介简单来说 redis 是⼀个非关系型数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度⾮常快,因此 redis 被⼴泛应⽤于缓存⽅向。另外,redis 也经常⽤来做分布式锁。redis 提供了多种数据类型来⽀持不同的业务场景。除此之外,redis ⽀持事务 、持久化、LUA脚本、LRU驱动事件、多种集群⽅案。2、Redis五种数据结构、底层原理、使用场景redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储;数据类型

2020-08-04 21:02:50 239

原创 网络相关面试题

get和post有什么区别 ?1)get参数通过url传递,post放在request body中;2)get请求在url中传递的参数是有长度限制的,而post没有;3)get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息;4)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留;5)GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同,GET产生一个TCP

2020-08-04 20:58:34 173

原创 JVM面试题收录

1.JVM和线程有什么关系 ?Java编写的程序都运行在Java虚拟机(JVM)中,每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行的。JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出。...

2020-08-04 20:37:09 59

原创 MySQL详解

索引

2020-08-04 19:13:26 210 1

原创 关于Mybatis你不得不知道的知识

2、Mybatis 的优缺点优点:相比 JDBC 减少了大量代码量,减少冗余代码。使用灵活,SQL 语句写在 XML 里,从程序代码中彻底分离,降低了耦合度,便于管理。提供 XML 标签,支持编写动态 SQL 语句。提供映射标签,支持对象与数据库的 ORM 字段映射关系。缺点:SQL 语句编写工作量较大,尤其是字段和关联表多时。SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。3、缓存什么是缓存?缓存就是存在于内存中的临时数据。为什么要使用缓存?.

2020-08-04 18:33:11 113

原创 SpringMVC工作流程

DispatcherServlet :SpringMVC 中的前端控制器,是整个流程控制的核心,负责接收请求并转发给对应的处理组件。HandlerMapping :完成 URL 到 Controller 映射,DispatcherServlet 通过 HandlerMapping 将不同请求映射到不同 Handler。HandlerAdapter :处理器适配器,Handler执行业务方法前需要进行一系列操作,包括表单数据验证、数据类型转换、将表单数据封装到JavaBean等,这些操作都由 Handl.

2020-08-04 17:18:10 86

原创 CAS底层原理

视频学习地址:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)概念CAS的全称是Compare-And-Swap,它是CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。import java.util.concurrent.atomic.AtomicInteger;public class CASTest { public static void main(String[] args) { AtomicInte

2020-08-04 14:48:24 180

原创 Volatile详解

视频学习地址:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)谈谈对Volatile的理解Volatile在日常的单线程环境是应用不到的Volatile是Java虚拟机提供的轻量级的同步机制(三大特性)保证可见性不保证原子性禁止指令重排JMMJMM是Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象的概念,实际上并不存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。J

2020-08-04 10:40:30 408

原创 二叉树的遍历

开篇: 本篇文章主要记录二叉树的前、中、后、层次遍历以及相关变形题解。第一题:二叉树的前序遍历方法一:递归public List<Integer> preOrder(TreeNode root){ List<Integer> list=new ArrayList<>(); preOrder(root,list); return list; } private void preOrder(TreeNod

2020-08-03 16:54:50 77

原创 经典算法

一、手写二分查找public class BinarySearch { public static void main(String[] args) { int[] arr = {1,3,5,7,9,11}; int key = 4; //递归实现 int position = recursionBinarySearch(arr,key,0,arr.length - 1); //循环实现 //int position = commonBinarySearch(arr, k

2020-08-03 16:48:20 158

原创 面试题:Spring

关于Spring的点:IoC、DI、AOP、Bean(作用域、生命周期)、Spring中的设计模式、事务(隔离级别、传播行为)一、IoCIoc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转,哪些方面反转了”:●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程

2020-08-03 16:15:39 104

原创 关于HashMap、你必须知道的几个点

关于HashMap的几个重要的点:初始化、put、get、扩容、优化、哈希冲突、HashMap线程不安全1.初始化(在HashMap构造函数中,会对initialCapacity执行tableSizeFor方法,目的是让HashMap容量为2的n次方。 public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalArg

2020-08-03 10:32:08 138

原创 ArrayList扩容机制解析

ArrayList构造函数说起: //带初始容量参数的构造函数。(用户自己指定容量) public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.element

2020-08-02 21:26:28 981

空空如也

空空如也

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

TA关注的人

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