- 博客(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 225
原创 八大排序算法详解
1、冒泡排序(Bubble Sort)**> 冒泡排序 是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两 个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的 元素会经由交换慢慢“浮”到数列的顶端。>> > - 1.1 算法描述> - 步骤1: 比较相邻的元素。如果第一个比第二个大,就交换它们两个; > - 步骤2: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后
2020-08-14 19:09:48 365
原创 科大讯飞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 1052
原创 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 1178 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 1325
原创 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 1465
原创 一步步带你看清MySQL索引为什么是B+树?
首先从二叉查找树开始说起:二叉查找树的性质是:1、任意节点左子树不为空,则左子树的值均小于根节点的值;2、任意节点右子树不为空,则右子树的值均大于于根节点的值;3、任意节点的左右子树也分别是二叉查找树;4、没有键值相等的节点;二叉查找树的平均查找速度比顺序查找更快。但其有局限性:一个二叉查找树是由n个节点随机构成,所以,对于某些情况,二叉查找树会退化成一个有n个节点的线性链。【退化为链表,性能大大下降】于是有了AVL树:二叉平衡查找树的性质是:所有节点的左右子树高度差不超过1。解决了
2020-08-07 16:54:20 178 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 200
原创 单例设计模式
方法一:饿汉式—静态常量方式(线程安全)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 82
原创 生产者消费者模式
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 88
原创 阻塞队列
Queue接口在Queue接口中,除了继承Collection接口中定义的方法外,它还分别额外地定义插入、删除、查询这3个操作,其中每一个操作都以两种不同的形式存在,每一种形式都对应着一个方法。add方法在将一个元素插入到队列的尾部时,如果出现队列已经满了,那么就会抛出IllegalStateException,而使用offer方法时,如果队列满了,则添加失败,返回false,但并不会引发异常。remove方法是获取队列的头部元素并且删除,如果当队列为空时,那么就会抛出NoSuchElementE
2020-08-06 11:16:05 244
原创 基于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 244
原创 好好理解下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 103
原创 简单聊聊AQS
概述AQS核⼼思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的⼯作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占⽤,那么就需要⼀套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是⽤CLH队列锁实现的,即将暂时获取不到锁的线程加⼊到队列中。CLH(Craig,Landin,and Hagersten)队列是⼀个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQS是将每条请求共享资源的线程封装成⼀个CLH锁队列的⼀个结点(Node)来实现
2020-08-05 14:40:56 221
原创 不安全集合类
视频学习地址:尚硅谷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 160
原创 四种线程池类
Java中四种具有不同功能常见的线程池。他们都是直接或者间接配置ThreadPoolExecutor来实现他们各自的功能。这四种线程池分别是newFixedThreadPool,newCachedThreadPool,newScheduledThreadPool和newSingleThreadExecutor。这四个线程池可以通过Executors类获取。newFixedThreadPool通过Executors中的newFixedThreadPool方法来创建,该线程池是一种线程数量固定的线程池。
2020-08-04 21:44:47 652
原创 Spring面试题
Spring事务实现原理Spring事务采用AOP的方式实现,就是通过一个动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。...
2020-08-04 21:34:47 183
原创 Redis面试题
1、Redis简介简单来说 redis 是⼀个非关系型数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度⾮常快,因此 redis 被⼴泛应⽤于缓存⽅向。另外,redis 也经常⽤来做分布式锁。redis 提供了多种数据类型来⽀持不同的业务场景。除此之外,redis ⽀持事务 、持久化、LUA脚本、LRU驱动事件、多种集群⽅案。2、Redis五种数据结构、底层原理、使用场景redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储;数据类型
2020-08-04 21:02:50 251
原创 网络相关面试题
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 205
原创 JVM面试题收录
1.JVM和线程有什么关系 ?Java编写的程序都运行在Java虚拟机(JVM)中,每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行的。JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出。...
2020-08-04 20:37:09 84
原创 关于Mybatis你不得不知道的知识
2、Mybatis 的优缺点优点:相比 JDBC 减少了大量代码量,减少冗余代码。使用灵活,SQL 语句写在 XML 里,从程序代码中彻底分离,降低了耦合度,便于管理。提供 XML 标签,支持编写动态 SQL 语句。提供映射标签,支持对象与数据库的 ORM 字段映射关系。缺点:SQL 语句编写工作量较大,尤其是字段和关联表多时。SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。3、缓存什么是缓存?缓存就是存在于内存中的临时数据。为什么要使用缓存?.
2020-08-04 18:33:11 127
原创 SpringMVC工作流程
DispatcherServlet :SpringMVC 中的前端控制器,是整个流程控制的核心,负责接收请求并转发给对应的处理组件。HandlerMapping :完成 URL 到 Controller 映射,DispatcherServlet 通过 HandlerMapping 将不同请求映射到不同 Handler。HandlerAdapter :处理器适配器,Handler执行业务方法前需要进行一系列操作,包括表单数据验证、数据类型转换、将表单数据封装到JavaBean等,这些操作都由 Handl.
2020-08-04 17:18:10 100
原创 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 207
原创 Volatile详解
视频学习地址:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)谈谈对Volatile的理解Volatile在日常的单线程环境是应用不到的Volatile是Java虚拟机提供的轻量级的同步机制(三大特性)保证可见性不保证原子性禁止指令重排JMMJMM是Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象的概念,实际上并不存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。J
2020-08-04 10:40:30 443
原创 二叉树的遍历
开篇: 本篇文章主要记录二叉树的前、中、后、层次遍历以及相关变形题解。第一题:二叉树的前序遍历方法一:递归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 90
原创 经典算法
一、手写二分查找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 191
原创 面试题:Spring
关于Spring的点:IoC、DI、AOP、Bean(作用域、生命周期)、Spring中的设计模式、事务(隔离级别、传播行为)一、IoCIoc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转,哪些方面反转了”:●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程
2020-08-03 16:15:39 116
原创 关于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 147
原创 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 1020
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人