自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021届秋招--滴滴笔试--逆时针构建逆序斐波那契矩阵

题目描述:给出n,则从斐波那契数列最大值开始,以第一行第一列为起点逆时针构建n x n的矩阵,并输出问题:我也不知道为啥,只有73的通过率。思路:就按逆时针构建,关键是确定好构建时候的上下限public class Num2 { public static void getRes(int n){ LinkedList<Integer> fib = new LinkedList<>(); fib.add(1); f

2020-08-26 11:26:34 227

原创 2021届秋招--猿辅导笔试--构建完全二叉树并遍历最外圈

题目描述:输入一个n,层次遍历构建完全二叉树,逆时针输出最外围的一圈public class Num1 { public static void main(String[] args){ Scanner in = new Scanner(System.in); int N = in.nextInt(); int[] numArr = new int[N+1];//1-N存放 int inputN = 0; Link

2020-08-26 11:17:20 410

原创 2021届秋招--爱奇艺笔试--匹配括号

题目描述:输入字符串只包括{}[](),检查是否正确匹配思路:简单题,栈顶匹配就完事了public class Num3 { public static void main(String[] args){ Scanner in = new Scanner(System.in); String inString = in.next(); LinkedList<Character> charStack = new LinkedList

2020-08-26 10:29:26 238

原创 2021届秋招--爱奇艺笔试--输入字符串WESN表示行走方向,检查是否重复走过

题目描述:输入一个字符串仅包括(WESN)表示前进方向,当走到曾经到过的地方就输出True,如果走完没有走到过之前的地方就输出False。思路:把起始点当做xy坐标的(0,0)点,W为向X轴负方向前进,E为X轴正方向,S为Y轴负方向,N为Y轴正方向。接下来是判断当前节点是否走过:把每个节点的坐标都放在一个map中,key为X轴坐标;value为该X坐标对应走过的Y坐标,val可以用一个List或者set存放该x坐标所有对应的Y节点。每新到一个节点就可以检查是否走过该节点。public class

2020-08-26 10:15:41 265

原创 2021届秋招--爱奇艺笔试--给出一个整数,输出阶乘末端0的个数

这次爱奇艺的开发笔试出奇的简单!题目描述:输入一个正整数,输出它的末端有几个0思路:0-9这十个数字乘积为0是有限制的。: 5 x 偶数。而偶数的个数远远多于5的个数。所以我们只要计算出这个数的阶乘中所有数分解后有几个5就可以了。public class Num1 { public static void main(String[] args){ Scanner in = new Scanner(System.in); Long n = in.nextL

2020-08-26 10:04:46 351

原创 2021届秋招--贝壳笔试--给出或运算最大的子序列的最短长度

题目:给定一个正整数数组,求或运算最大时候的最短序列。示例:输入: 1 2 3输出:1解释:1 2或运算是 3,1 2 3或运算是3,3自己也是3,最后一个长度为1,输出1.运算:1|1 = 1,1|0 = 1,0|0 = 0public class Num3 { public static int getNum(int n, long[] numsArr){ if (n == 0) return 0; int[] indexNum .

2020-08-12 12:03:43 288

原创 2021届秋招--贝壳笔试--求用最少的颜色给矩阵上色

题目:输入一个NxM的矩阵。给每个元素进行着色,要求是相邻的不同颜色一样(指上下左右),最终着色每种颜色数量一样。例:输入 2 2 输出 2第一行第一列和第二行第二列用颜色一,剩下两个颜色2.public class Num2 { public static long getNum(long len){ long i = 3; while (true){ long temp = len%i; ...

2020-08-12 11:44:48 327

原创 2021届秋招--网易笔试--输出指定最小字典序

题目:先输入两个数n,m。然后接着输入m个数(每个数小于等于n)输出最小字典序。同时保证在输出结果中删去无关数字后可以得到输入的m个数的正确序列。示例:输入: 5 2 4 2输出:1 3 4 2 5解释:1 2 3 4 5是n为5时候最小的字典序,但是输出要4在2前面,所以这个输出才是最小的。(先上代码,思路详述在下面)public class Num2 { public static void main(String[] args){ ...

2020-08-12 11:24:16 371

原创 2021届秋招--网易笔试--求最多分解为几个素数

题目:输入一组正整数,求解最多可以分解为几个素数例:输入:3 5 7输出:6因为3不能再分,5可以分为2+3,7可以分为2+2+3,一共6个。如果在平时可能10分钟就想出来写出来了。在笔试的时候还是太紧张了,想了半天才想到被素数迷惑了,实际上跟素数没多大关系。思路:任何数都是奇数或者偶数,所以这个数一定是n个2相加,如果是奇数,其中一个2换成3就行了,这样一想通就很简单了。只要这个数除以2就行了。比如3/2 = 1,5/2 = 2,7/2 = 3一共就是6个。边界值比如1,2,3..

2020-08-12 10:39:34 264

原创 Java笔记4.6--mycat分库分表

一张表100w,按ID(分库字段)除以10取摸,分到10个库。1号库id最后位总是1,2号库id最后位是2,以此类推。不同的表尽量创建到不同的机器上,别10张表都在一个机器上,甚至一个数据库上,这样意义不大,实际操作时,可以分到5台服务器上,每台机器2个库,不同数据库上,表的结构是一样的。Mycat可以连oracle或者mysql。只把个人大数据量表拆分。比如把百万规模的order表分到10个库上,分库字段是id。在schema,xml中配置10个数据库地址。在rule.xml里定义待分库的表ord

2020-08-05 23:43:31 258

原创 Java笔记4.5--数据库调优

三范式:字段间不存在传递关系。就是说每个字段都跟主键有直接关系,而不能有间接关系。比如有张订单流水表,(订单编号,总价,商品编号,商品名)通过商品编号能再次传递找到商品名,所以不符三范式需要拆分成两个表,订单流水表,(订单编号,总价,商品编号)。商品表,(商品编号,商品名)能避免数据冗余和更新异常问题。案例:在过去一个月里,找出过去一个月的所有买过Java书籍的会员的邮箱,以便于发广告。可以从表中发现,三张表关联查询涉及到的数量太大了运行时间长的SQL会导致有更新操作的SQL

2020-08-05 22:00:30 177

原创 Java笔记4.4--JDBC简单预处理批处理防SQL注入

预处理批处理语法:PreparedStatement pstmt;String query = "insert into student valuse (?,?)";pstmt = connection.prepareStatement(query);pstmt.setString(1,"1");pstmt.setString(2,"Peter");pstmt.addBatch();pstmt.executeBatch();项目中一般PreparedStatement比Statemen

2020-08-05 10:42:42 137

原创 Java笔记4.3--Mysql事务

事务要么全做,要么全都不做。事务并发会引发脏读,不可重复读和幻读,事务隔离就是解决这个问题,有多种隔离级别。虽然也能通过JDBC代码改事务隔离级别,但是这是数据库层面的。低级的事务隔离级别支持更高的并发操作,系统代价也更小。慎用高级的事务隔离级别。脏读:一个事务读取了另一个事务尚未提交的数据。案例:是指一个事务读取了另一个事务尚未提交的数据。假设Mary的工资是1000,财务人员在某一时刻将Mary的工资改成8000(但未提交这个修改事务),此时Mary读取自己的工资,发现变为了80

2020-08-04 23:18:47 100

原创 Java笔记4.2--Mysql索引

(Mysql)索引数据结构:B+树聚簇索引叶节点是数据,非聚簇索引叶节点是数据的地址,一个表职能有一个聚簇索引。索引需要耗费空间,所以不是多多益善。权衡因素:1.建索引要空间,更改数据要重建索引2.表里数据量不大,可以不建索引3.数据量大,但是该字段需要大批量更新,慎重建索引,或者操作前关索引4.数量大,该字段重复性不高,且频繁读,可建索引索引的正确和错误用法:select name, age, score from student where name = 'To.

2020-08-04 22:16:38 79

原创 Java笔记4.1--Mysql之常见问题

常规用的是内连接(取交集):左连接:通过grop by 和 having 查重去重:一个表出现多个Id相同的重复数据。使用having外带子查询:select * from student where Id in (select Id from student group by Id having count(Id) > 1)同时使用delete删除重复的DELETE from student WHERE (id) IN (SELECT id FROM student

2020-08-03 21:59:16 101

原创 Java笔记3.6--简单总结

1.从虚拟机体系结构引出内存管理用完集合要及时clear,用完IO和JDBC后在finally里释放对象2.根据堆区结构,阐述垃圾回收流程分代管理,讲jdk1.7和jdk1.8的区别。讲述GC流程,说明时候触发轻量级GC,什么时候触发Full GC。判断对象可被回收的方式:对象上没有强引用,以及引用计数和根可达算法。引出内存调优,代码级别如何调优,如何排查OOM。3.进一步说明代码级别的调优比如不要频繁修改String。常用的命令参数。讲述弱引用,软引用,引出监控内存性能,排查O

2020-08-03 15:10:09 71

原创 Java笔记3.5--定位排查OOM

什么时候该排查:1.GC过程中,会Stop the World,不干其他活2.本该运行好的程序,在某个时刻卡住,业务日志没有异常3.通过CAT等监控工具,发现某段时间内存用量居高不下上线后一般接CAT等监控工具,监控内存。如果超出阈值,发出一报警邮件。4.稳定重现OOM,比如一天一次,或者每天频繁出现通过GC日志确认:1.能看到GC发生时间和回收的内存量。2.结合卡的时间点,确认是因为GC造成Stop the World。3.可定量观察到GC的频繁程度通过代.

2020-08-03 14:43:30 180

原创 Java笔记3.5--内部匿名类形参加final

jdk1.7以及之前,内部匿名类形参前都要加final。jdk1.8不需要,隐性加上了。jdk1.7以及之前:内部匿名类形参前加final,否则报错。内部类和外部类是平行的,没有隶属关系。外部类有可能会优先于内部类回收,如果不加final,参数就会被回收,导致于内部类无法使用。加final后,以常量方式存储在常量池,不是在堆中,所以外部类回收后该参数依然存在。引出话题:在回答final方法的用途时候可以说明。被问到内部类时候可以说明。项目中在消息模块或者其他模块用到线程池

2020-07-30 12:22:31 115

原创 Java笔记3.4--软引用弱引用在JVM中调优

定义:强引用:new出来的,比如String str = new String(“hello”)。对象上有强引用不会被回收。软引用:SoftReference<String> softRef = new SoftReference<String>(str);(其中str是引用)。如果只有软引用,而且当虚拟机堆内存不够时候会回收。弱引用:WeakReference<String> weakRef = new WeakReference<String>

2020-07-30 11:01:32 103

原创 Java笔记3.3--代码级别优化内存性能

Java代码出现内存泄漏:1.对象上有强引用2.虽然Java程序运行完后内存会回收,但是越早越好3.出现内存泄漏后,会导致Stop The World(一段时间内虚拟机什么也不做,单纯内存回收)和OOM异常深入了解finalize方法:1.object类的方法,任何类都可以重写2.当JVM通过根可达算法,判断某对象可以被回收后,会判断是否重写了fialize方法,如果没有,直接回收3.如果重写了,把该对象放入F-Queue队列,有线程专门遍历并执行该类的finalize方法

2020-07-29 23:57:00 207

原创 Java笔记3.2--GC流程理解

字节码和跨平台特性:.class格式的字节码形式运行虚拟机可以屏蔽不同操作系统的差异JDK是开发环境,JRE是运行环境JRE中包括了Java虚拟机和Java程序运行时所需的核心类库虚拟机结构:JVM栈是现成私有的堆区存放new出来的对象,jdk1.8中常量池和静态变量存在堆区元数据存在本地内存垃圾回收时的分代管理:jdk1.8中,元数据区替代持久代类的信息和编译后的代码数据等放元数据区JVM内存调优是针对堆区而言,再进一步是针对年轻代和年老代虽然J

2020-07-29 17:43:55 89

原创 Java笔记3.1--关于String的JVM问题

从String入手,了解不可变类的技能从常量和变量角度,入门JVM里的堆和常量池从String角度,分析JVM性能调优的措施常量和变量:equals比较值,==比较地址new出来的是变量常量可以共享内存,变量不会常量连接还是常量,有变量参与是变量public class StringDemo { public static void main(String[] args){ String a = "abc"; String b = "

2020-07-29 10:19:22 99

原创 Java笔记2.7--ConcurrentHashMap展示并发,集合,源码

jdk1.7和1.8的差别,介绍ConcurrentHashMap通过put 和get源码,了解ConcurrentHashMap的底层结构和hash流程以CAS+Synchronized管理并发的方式实例介绍volatile含义1.引出话题HashMap和线程不安全对象时候并发和volatile时回答数据结构hash表,红黑树等HashMap和SynchronizedMap区别1.jdk1.7以“锁”segment的方式保证并发2.jdk1.8中以“CAS”的方

2020-07-28 11:59:33 77

原创 Java笔记2.6--线程并发深入

1.同步计数器CountDownLatch2.线程通过Callable返回结果,通过Future获取结果3.通过CompletableFuture管理多线程(基于jdk1.8)CountDownLatch:有一个正数计数器。countDown()方法对计数器做减操作。直到所有的计数器归0(或中断或超时),await线程才会继续,否则一直阻塞。能保证以CountDownLatch所标记的前置任务都完成后,主任务再执行。通过Callable类对象得到返回结果。用future得到Calla

2020-07-28 10:23:00 80

原创 Java笔记2.5--线程并发类

1.wait,nofity管理并发2.Condition实现线程间通讯3.Semaphore管理多线程竞争在生产者消费者问题观察wait和notify(//TODO)1.均要放在synchronized作用域中2.执行wait,释放synchronized所关联的锁,进入阻塞状态,无法再次主动进入可执行状态。3.执行notify,通知因调用wait方法而等待锁的线程,如多个线程等待,任意一个被唤醒。4.notifyAll会唤醒因wait进入阻塞状态的线程,但是他们没得到锁,会进行

2020-07-27 15:32:36 58

原创 java笔记2.4--线程池

可能遇到的问题:1.为什么要用线程池?避免因线程切换造成的性能损耗。2.构造线程池时,你关注哪些参数?3.线程池时如何接受并处理任务的?任务满了以后怎么办?4.在使用线程池时,如何避免OOM异常?基本用法:定义Runnable(没有返回值)或者Callable(可以有返回值)类型的任务创建ThreadPoolExector,注意参数把任务放进线程池运行通过shutdown方法关闭,即不接受新任务,当前线程执行完后退出。class MyThread extends T

2020-07-23 00:23:49 71

原创 Java笔记2.3--ThreadLocal

线程里可以使用定义在主内存里的变量。也能通过ThreadLocal存储线程本地变量。(每一个线程有一个自己的变量,所以不存在多个线程同时对主内存中的一个变量进行访问)用多个线程爬取不同网站,每个线程用自身的ThreadLocal来维护爬取不成功的列表。使用ThreadLocal:class MyThreadLocal{ //定义一个ThreadLocal变量,用来保存当前线程私有数据 private ThreadLocal<Integer> localVal =

2020-07-22 23:28:26 67

原创 Java笔记1.1--ArratList LinkedList hash相关

ArrayListt (数组,满了后扩大空间,x1.5)以下用Array:一次性追加数据,一次性读取。线程不安全LinkedList(双向链表)随机增删查用Link.线程不安全Vector(满了空间x2)线程安全。

2020-07-22 16:58:55 74

原创 Java笔记1.2--基本的流程控制 方法的覆盖和重载 抽象类抽象方法

流程控制:1.判断。在写if的时候注意多个条件判断时,如果是 && 第一个条件不符合时第二个就不会计算了。2.注意边界问题。3.if过多改写为switch。(必须要有Break,不然会继续执行下一个case)4.switch在jdk1.7之前只支持byte,short,char,int和其对应的封装类。1.8以后加入了枚举,boolean,字符串。覆盖和继承:在继承父类的时候子类重写的函数不能将public重写为private(缩小后会造成父类本该可见的方法不..

2020-07-22 16:58:42 195

原创 Java笔记1.3--异常处理

异常处理:1.finally中放资源回收的代码。(即使try catch中有return还是执行finally,只有system.exit(0),才不执行后面的finally)释放IO连接,数据库连接,对象方法的强引用设为Null,清空clear集合。2.当心runtimeException。常见的runtimeException有空指针异常,除0异常。无需用try catch,一旦发生就终止程序。3.尽可能缩小try的监控范围。如果两个业务没有联系,就不要放在一个try里,要分开4.在

2020-07-22 16:58:26 64

原创 Java笔记1.4--设计模式

单例模式:/**\ * 最简单的单例模式,无法预防多线程时候的错误 */public class SingleModel { private static SingleModel reader = null; private SingleModel(){} public static SingleModel getInstance(){ if (reader == null) return new SingleModel();

2020-07-22 16:57:59 84

原创 Java笔记2.1--线程之synchronized

要点:1.通过线程内存模型,展示线程安全方面的技能。2.能在面试中说出Synchronized和各种锁的使用要点。3.能在面试中展示各种线程同步和并发技能。3.讲述ConcurrentHashMap对象的底层代码,展示锁,volatile,并发控制和集合方面的技能。public class ThreadSafeDemo { public static void main(String[] args){ List unsafeList = new Array.

2020-07-22 16:57:37 145

原创 Java笔记2.2--线程之锁的使用

ReentrantLock:控制业务层面的并发。案例:ATM登录,查询,取钱,退出等整个流程只能有一个人操作。class AccountWithLock{ private Lock lock; public AccountWithLock(){ lock = new ReentrantLock(); } //锁账户 public void lockAccount(){ lock.lock(); } //解锁账户

2020-07-22 16:56:55 80

原创 ubuntu 18 云服务器 创建好支持中文的pycharm远程可视化(可视化部分)

起因是这样的,用Win10,python开发有一个包pip时候报错说win没有bash命令,可是win开启bash后找了很多方法还是没有能导入。于是想着在linux服务器上搞吧。先是在自己的一台centos7云服务器上,自己不知道yum是依赖于py2.7的,看了一个坑爹博主直接给删了py2.7装py3.6。没办法又重装了py2.7,搞pycharm也是,启动错误乱七八糟,我装的是jdk1.8,网上大部分教程是open jdk,可是换了openjdk也打不开pycharm,就说java有错,很迷。一气之下

2020-06-16 14:16:04 290

原创 LeetCode--19. 删除链表的倒数第N个节点

热门题,难度中等题。给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。很明显,经典的双指针,就算没看过双指针相关,也应该能想到两个遍历下标保持n的距离,当快的到了终点,那么现在的就是要删除的。要注意的一个地方就是养成考虑特殊情况的习惯,删除第一个。删除第一个的话就需...

2020-06-04 09:40:43 90

原创 LeetCode152. 乘积最大子数组

签到题,中等题。给你一个整数数组nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。这种题第一想法就是动态规划的思想,但是涉及到乘积与加减不一样,他很可能负负得正取到更大的。我就没想到除了当前最大以外,再设一个当前最小值,这样就可以避免遍历到下一个为负的情况了。我的代码逻辑是:以0为分段标记,记录当前段的值tmpNum,当前段中遇到...

2020-05-18 18:39:01 115

原创 LeetCode--25. K 个一组翻转链表

给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5难度是困难题,不过思路好想,就是实现的时候容易写错。我的思路:1.首...

2020-05-16 21:51:37 131

原创 LeetCode--560. 和为K的子数组

给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。刚开始看到的时候想到了用HashMap记录前n项和,以及用当前前n项和减去之前任意的,如果有值为k,那么就有一组存在,但是我没想到的是map&l...

2020-05-16 10:08:07 141

原创 LeetCode--50. Pow(x, n)

计算x的n次方。n为整数。-100.0 <x< 100.0 n是 32 位有符号整数,其数值范围是[−2^31,2^31− 1]中等题。这个题大家应该都能想到递归的方式计算,这里主要记录一下官方给的非递归解法。递归的代码如下: public double simPow(double x, int n){ //double tmp; if(n == 0) return 1.0; doub...

2020-05-11 15:49:30 127

原创 LeetCode--236. 二叉树的最近公共祖先

难度中等题。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。思路有多种。 1. 纯粹的自底向上。后序遍历中,先找到该节点,那么返回一个true。当某个节点的左右子树都返回true时,该节点就是要求的。如果两个点是祖先后代关系,那么返回为当前节点值等于其中一个查询值且一个子树为true...

2020-05-10 18:11:26 159

空空如也

空空如也

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

TA关注的人

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