2 Jacob Lee

尚未进行身份认证

我要认证

学而时习之,不亦说乎?

等级
TA的排名 28w+

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

八大排序算法详解

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

2020-08-14 19:09:48

科大讯飞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

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

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

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

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

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

2020-08-07 16:54:20

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

单例设计模式

方法一:饿汉式—静态常量方式(线程安全)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

生产者消费者模式

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

阻塞队列

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

2020-08-06 11:16:05

基于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

好好理解下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

简单聊聊AQS

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

2020-08-05 14:40:56

不安全集合类

视频学习地址:尚硅谷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

四种线程池类

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

2020-08-04 21:44:47

Spring面试题

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

2020-08-04 21:34:47

Redis面试题

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

2020-08-04 21:02:50

网络相关面试题

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

JVM面试题收录

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

2020-08-04 20:37:09

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。