
java
CryptWinter
Talk is cheap,show me the code.
展开
-
[Java]==和equals()的区别(按照数据类型区分)
背景知识【引用类型】复合数据类型是引用类型**1.基本数据类型,也称原始数据类型。**byte,short,char,int,long,float,double,boolean他们之间的比较,应用双等号(==),比较的是他们的值。基本数据类型比较, == 和 Equals 两者都是比较值注意注释 创建的方法不同 导致地址不同 int x = 10; int y = 10; // 内存中的常量池(栈),常量池属于方法区的一部分,当运行到s1创建对象时,如原创 2020-07-26 17:15:48 · 176 阅读 · 0 评论 -
[Java基础][Java]toString()方法
【原理解析】toString()方法返回反映这个对象的字符串因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法【示例】public static void main(String[原创 2020-07-26 16:03:38 · 449 阅读 · 0 评论 -
[小技巧][JAVA][转换]整型int与字符串String相互转换
字符串转换整型String - >Int1). int i = Integer.parseInt([String]); 或者//radix 进制int i = Integer.parseInt([String],[int radix]);//intValue() 输出int数据。2). int i = Integer.valueOf(String).intValue();或者int i = Integer.valueOf(String);整型转换字符串Int - > Stri原创 2020-07-26 15:07:06 · 360 阅读 · 0 评论 -
[Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]
【问题描述】[困难]【解答思路】1. 记忆化搜索时间复杂度:O(n^3) 空间复杂度:O(n^2)class Solution { public int[][] rec; public int[] val; public int maxCoins(int[] nums) { int n = nums.length; val = new int[n + 2]; for (int i = 1; i <= n转载 2020-07-19 10:05:29 · 199 阅读 · 0 评论 -
[Leetcode][第35题][JAVA][搜索插入位置][二分法]
【问题描述】[中等]【解答思路】二分法时间复杂度:O(LogN) 空间复杂度:O(1)public class Solution { public int searchInsert(int[] nums, int target) { int len = nums.length; if (len == 0) { return 0; } // 特判 if (nums[len -转载 2020-07-17 11:22:06 · 258 阅读 · 0 评论 -
[剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]
【问题描述】[中等]235/68-1 搜索二叉树 236/68-2 二叉树【解答思路】递归时间复杂度:O(N) 空间复杂度:O(N)情况 1. , 2. , 3. , 4. 的展开写法如下。class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null || root == p || root =转载 2020-07-16 11:48:43 · 220 阅读 · 0 评论 -
[Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
【问题描述】[中等]【解答思路】1. DFS 深度优先遍历时间复杂度:O(N+M) 空间复杂度:O(N)class Solution { private static final int UNCOLORED = 0; private static final int RED = 1; private static final int GREEN = 2; private int[] color; private boolean valid;转载 2020-07-16 10:21:39 · 181 阅读 · 0 评论 -
[剑指offer]面试题第[61]题[JAVA][扑克牌中的点数][HashSet][数组]
【问题描述】[简单]【解答思路】1. 集合 Set + 遍历时间复杂度:O(N) 空间复杂度:O(N)class Solution { public boolean isStraight(int[] nums) { Set<Integer> repeat = new HashSet<>(); int max = 0, min = 14; for(int num : nums) { i转载 2020-07-15 10:17:00 · 169 阅读 · 0 评论 -
[Leetcode][第96题][JAVA][不同的二叉搜索树][动态规划][数学]
【问题描述】[中等]【解答思路】1. 动态规划第 1 步:设计状态第 2 步:状态转移方程第 3 步:考虑初始化第 4 步:考虑输出时间复杂度:O(N^2) 空间复杂度:O(N)public int numTrees(int n) { int[] G = new int[n + 1]; G[0] = 1; G[1] = 1; for (int i = 2; i <= n; ++i) {转载 2020-07-15 09:30:05 · 158 阅读 · 0 评论 -
[剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]
【问题描述】[中等]把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.1原创 2020-07-14 15:35:44 · 365 阅读 · 0 评论 -
[小技巧] ArrayList与LinkedList对比与常见方法
ArrayList与LinkedList对比ArrayList是顺序结构,所以定位很快,但插入,删除数据慢。LinkedList 是链表结构,定位慢,但插入,删除数据快。ArrayList与LinkedList常见方法ArrayList实现了List接口,常见方法有:add(); contains(); get(); indexOf():定位对象所处的位置; remove(); size(); toArray(); toString();//转换为字符串LinkedList也实现了List接口外原创 2020-07-14 12:29:45 · 345 阅读 · 0 评论 -
[剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]
【问题描述】[中等]【解答思路】1. 暴力复杂度分析class MaxQueue { Queue<Integer> queue = new LinkedList(); int maxValue; public MaxQueue() { queue = new LinkedList(); } public int max_value() { if(queue.isEmpty()) return -1;原创 2020-07-14 12:25:48 · 166 阅读 · 0 评论 -
[Leetcode][第120题][JAVA][三角形最小路径和][动态规划][递归]
【问题描述】[中等]【解答思路】1. 动态规划思路一 自上而下第 1 步:设计状态f[i][j] 表示从三角形顶部走到位置 (i,j) 的最小路径和位置(i,j) 指的是三角形中第 i 行第 j 列(均从 00 开始编号)的位置第 2 步:状态转移方程第 3 步:考虑初始化f[0][0]=c[0][0]第 4 步:考虑输出f[n−1][0] 到 f[n-1][n-1] 中的最大值,其中 n 是三角形的行数第 5 步:考虑是否可以状态压缩是时间复杂度:O(N^2) 空间复杂转载 2020-07-14 11:12:53 · 274 阅读 · 0 评论 -
[剑指offer]面试题第[59-1]题[Leetcode][第239题][JAVA][滑动窗口的最大值][单调队列][优先队列]
【问题描述】[困难]【解答思路】1. 暴力两层 for 循环,每次都从窗口中找最大值即可时间复杂度:O(N^2) 空间复杂度:O(N)public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; if (n == 0) { return nums; } int result[] = new int[n - k + 1]; for (int i = 0;转载 2020-07-13 17:49:51 · 225 阅读 · 0 评论 -
[剑指offer]面试题第[58-2]题[JAVA][左旋转字符串][拼接]
【问题描述】[中等]【解答思路】1. 字符串切片应用字符串切片函数,可方便实现左旋转字符串。时间复杂度:O(N) 空间复杂度:O(N) public String reverseLeftWords(String s, int n) { return s.substring(n, s.length()) + s.substring(0, n); }2. 列表遍历拼接时间复杂度:O(N) 空间复杂度:O(N) public String r转载 2020-07-13 16:02:00 · 172 阅读 · 0 评论 -
[Leetcode][第315题][JAVA][计算右侧小于当前元素的个数][暴力][归并排序+索引数组]
【问题描述】[中等]【解答思路】1. 暴力 (超时)时间复杂度:O(N^2) 空间复杂度:O(1)public List<Integer> countSmaller(int[] nums) { List<Integer> ans = new ArrayList<Integer>(); int n = nums.length; if(n==0){ return ans;转载 2020-07-11 13:36:16 · 350 阅读 · 0 评论 -
[JAVA][算法] [字符串匹配]KMP
我们为什么需要KMP?在字符串匹配问题中,我们需要找到匹配串pattern在原串text中的位置,一种显而易见的思路就是暴力匹配,如图所示,我们把pattern放置到text中的每个位置进行比较即可。但是大家可以发现,这种方式的时间复杂度太高了,达到了O(pattern.length * text.length),我们是否可以进一步进行优化呢?在第一次匹配时,abaa和abab的最后一个字符不匹配,前面aba都匹配好了,移动了一位之后,发现前面又匹配不上了,这次移动相当于多此一举。换句话说,我们每次移原创 2020-07-09 21:22:35 · 191 阅读 · 0 评论 -
[Leetcode][第1392题][JAVA][最快乐前缀][KMP][字符串编码]
【问题描述】[困难]【解答思路】1. Rabin-Karp 字符串编码(详见总结)关于为什么哈希值计算乘数为31,说法是,首先31是质数,其次编译器会将31*i 优化为 (i<<5)-i时间复杂度:O(N^2) 空间复杂度:O(1)// 本质上就是循环比较前缀与后缀是否相等// 利用substring equals会超时// 利用字符串hash值来进行比较,每次也不需要重新计算// 对于前缀 hash = hash*31 + 新添头字符ch// 对于后缀 hash =转载 2020-07-09 20:48:34 · 298 阅读 · 0 评论 -
[Leetcode][程序员面试金典][面试题17.13][JAVA][恢复空格][动态规划][Trie][字符串哈希]
【问题描述】[中等]【解答思路】1. 动态规划动态规划流程第 1 步:设计状态dp[i] 表示字符串的前 i 个字符的最少未匹配数。第 2 步:状态转移方程假设当前我们已经考虑完了前 i -1个字符了,对于前 i 个字符对应的最少未匹配数:第 i 个字符未匹配,则 dp[i] = dp[i+1] + 1,即不匹配数加 1;遍历前 i -1个字符,若以其中某一个下标 j 为开头、以第 i 个字符为结尾的字符串正好在词典里,则 dp[i] = min(dp[ i ], dp[ j ])转载 2020-07-09 17:28:50 · 268 阅读 · 0 评论 -
[剑指offer]面试题第[43]题[Leetcode][第233题][JAVA][1~n整数中1出现的次数][找规律][递归]
【问题描述】[困难]【解答思路】1. 暴力 (超时)逐个数统计’1’的数量时间复杂度:O(N^2) 空间复杂度:O(1) public int countDigitOne(int n) { int count = 0; for(int i=1;i<=n;i++){ int tmp = i; while(tmp>0){ if(tmp%10==1){原创 2020-07-08 14:11:14 · 225 阅读 · 0 评论 -
[小错误][JAVA][数组初始化]数组静态初始化和动态初始化不能混用
错误 return new int[1]{shorter*k};error: array creation with both dimension expression and initialization is illegalreturn new int[1]{shorter*k};数组静态初始化和动态初始化混用解决办法数组的使用分声明和初始化两部分,两者可同时进行,也可分开进行int[] array; 声明int[] array = new int{element1,elemen原创 2020-07-08 10:52:06 · 3190 阅读 · 0 评论 -
[Leetcode][程序员面试金典][面试题16.11][JAVA][跳水板][数学][动态规划]
【问题描述】[简单]【解答思路】边界问题k=0 ,不能产生跳水板,返回空数组shorter 等于longer,只有一种跳水板,返回longerk思路一般情况,k块木板,k种可能跳水板的长度是 shorter(k-j)+longer*j,其中 0 ≤ i < j ≤ k,且为升序排列1. 数学时间复杂度:O(N^2) 空间复杂度:O(1) public int[] divingBoard(int shorter, int longer, int k) {原创 2020-07-08 10:44:37 · 308 阅读 · 0 评论 -
[小技巧][JAVA]判断字符串某一位是否是数字/字母
数字 Character.isDigit(char ch)字母 Character.isLetter(char ch)1用JAVA自带的函数public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } return true; }2用正则表原创 2020-07-07 13:23:03 · 4895 阅读 · 0 评论 -
[项目经验]玩转开源项目
搞懂一个开源项目的几大步骤细看四大模块转载 2020-07-07 11:07:56 · 568 阅读 · 0 评论 -
Redis面试题
概述什么是RedisRedis有哪些优缺点为什么要用 Redis /为什么要用缓存为什么要用 Redis 而不用 map/guava 做缓存?Redis为什么这么快数据类型Redis有哪些数据类型Redis的应用场景持久化什么是Redis持久化?Redis 的持久化机制是什么?各自的优缺点?如何选择合适的持久化方式Redis持久化数据和缓存怎么做扩容?过期键的删除策略Redis的过期键的删除策略Redis key的过期时间和永久有效分别怎么设置?转载 2020-06-25 00:54:24 · 322 阅读 · 0 评论 -
并查集入门
quick-find时间复杂度quick-unionquick-find时间复杂度### quick-union按SIZE合并按秩合并路径压缩面试了解基本思想 做蓝色 写路径隔代压缩转载 2020-06-16 11:07:10 · 123 阅读 · 0 评论 -
MyBatis面试题(2020最新版)
MyBatis简介MyBatis是什么?ORM是什么为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?传统JDBC开发存在的问题JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?Mybatis优缺点MyBatis框架适用场景Hibernate 和 MyBatis 的区别MyBatis的解析和运行原理MyBatis编程步骤是什么样的?请说说MyBatis的工作原理MyBatis的功能架构是怎样的JDBC API 允许用户访问任.转载 2020-06-14 18:10:31 · 2391 阅读 · 0 评论 -
[剑指offer][JAVA]面试题第[21]题[调整数组顺序使奇数位于偶数面前][双指针]
【问题描述】[简单]输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 示例:输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 【解答思路】1. 双指针时间复杂度:O(N) 空间复杂度:O(1)class Solution { public int[] exchange(int[] nums) { int i = 0,转载 2020-06-11 23:23:18 · 168 阅读 · 0 评论 -
Spring Cloud面试题
为什么需要学习Spring Cloud什么是Spring Cloud设计目标与优缺点设计目标优缺点Spring Cloud发展前景整体架构主要项目Spring Cloud ConfigSpring Cloud NetflixSpring Cloud BusSpring Cloud ConsulSpring Cloud SecuritySpring Cloud SleuthSpring Cloud StreamSpring Cloud TaskS转载 2020-06-11 10:55:07 · 197 阅读 · 0 评论 -
Spring Boot面试题
概述什么是 Spring Boot?Spring Boot 有哪些优点?Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?配置什么是 JavaConfig?Spring Boot 自动配置原理是什么?你如何理解 Spring Boot 配置加载顺序?什么是 YAML?YAML 配置的优势在哪里 ?Spring Boot 是否可以使用 XML 配置 ?spring boot 核心配置文件是什么?bootstrap.properties 和 applic转载 2020-06-10 11:38:08 · 195 阅读 · 0 评论 -
Spring面试题
Spring面试题Spring概述(10)什么是spring?Spring框架的设计目标,设计理念,和核心是什么Spring的优缺点是什么?Spring有哪些应用场景Spring由哪些模块组成?Spring 框架中都用到了哪些设计模式?详细讲解一下核心容器(spring context应用上下文) 模块Spring框架中有哪些不同类型的事件Spring 应用程序有哪些不同组件?使用 Spring 有哪些方式?Spring控制反转(IOC)(13)什么是Spring IOC 容器?控制反转(IoC)有什么作用转载 2020-06-08 19:33:07 · 367 阅读 · 0 评论 -
并发编程面试题
基础知识并发编程的优缺点为什么要使用并发编程(并发编程的优点)并发编程有什么缺点并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?并行和并发有什么区别?什么是多线程,多线程的优劣?线程和进程区别什么是线程和进程?进程与线程的区别什么是上下文切换?守护线程和用户线程有什么区别呢?如何在 Windows 和 Linux 上查找哪个线程cpu利用率最高?什么是线程死锁形成死锁的四个必要条件是什么如何避免线程死锁创建线程的四种方式创建线程有哪几种方式?说一下 r转载 2020-06-06 00:32:47 · 245 阅读 · 0 评论 -
架构设计&分布式&数据结构与算法面试题
目录架构设计请列举出在JDK中几个常用的设计模式?什么是设计模式?你是否在你的代码里面使用过任何设计模式?静态代理、JDK动态代理以及CGLIB动态代理静态代理动态代理cglib代理单例模式工厂模式观察者模式装饰器模式秒杀系统设计分布式分布式概述分布式集群微服务多线程高并发分布式系统设计理念分布式系统的目标与要素分布式系统设计两大思路:中心化和去中心化分布式与集群的区别是什么?CAP定理CAP定理的证明BASE理论BASE理论的核心思想BASE理论三要素1. 基本可用2. 软状态3. 最终一致性数据结构与算转载 2020-06-03 22:16:41 · 891 阅读 · 0 评论 -
Java异常面试题
Java异常架构与异常关键字Java异常简介Java异常架构1. Throwable2. Error(错误)3. Exception(异常)运行时异常编译时异常4. 受检异常与非受检异常受检异常非受检异常Java异常关键字Java异常处理声明异常抛出异常捕获异常如何选择异常类型常见异常处理方式直接抛出异常封装异常再抛出捕获异常自定义异常try-catch-finallytry-with-resourceJava异常常见面试题1. Error 和 Exception 区别是什么?2. 运行时异常和一般异常(受转载 2020-06-02 22:27:09 · 271 阅读 · 0 评论 -
Java集合容器面试题
集合容器概述什么是集合集合的特点集合和数组的区别使用集合框架的好处常用的集合类有哪些?List,Set,Map三者的区别?List、Set、Map 是否继承自 Collection 接口?List、Map、Set 三个接口存取元素时,各有什么特点?集合框架底层数据结构哪些集合类是线程安全的?Java集合的快速失败机制 “fail-fast”?怎么确保一个集合不能被修改?Collection接口List接口迭代器 Iterator 是什么?Iterator 怎转载 2020-05-29 14:13:59 · 308 阅读 · 0 评论 -
Java虚拟机(JVM)面试题大集合
Java内存区域说一下 JVM 的主要组成部分及其作用?说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别?队列和栈是什么?有什么区别?HotSpot虚拟机对象探秘对象的创建为对象分配内存处理并发安全问题对象的访问定位句柄访问直接指针内存溢出异常Java会存在内存泄漏吗?请简单描述垃圾收集器简述Java垃圾回收机制GC是什么?为什么要GC垃圾回收的优点和原理。并考虑2种回收机制垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行转载 2020-05-28 11:05:15 · 521 阅读 · 0 评论 -
[Leedcode][JAVA][第76题][最小覆盖子串]滑动窗口]
【问题描述】[中等]【解答思路】1. 滑动窗口 map时间复杂度:O(N^2) 空间复杂度:O(1)class Solution { public String minWindow(String s, String t) { if (s == null || t == null || s.length() == 0 || t.length() == 0) return ""; // 定义一个数字,用来记录字符串 t 中出现字符的频率,也就是窗口内需要转载 2020-05-25 10:04:06 · 400 阅读 · 1 评论 -
Java基础知识面试题
1.Java概述JVM、JRE和JDK的关系JVMJava Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。JREJava Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类...转载 2020-05-23 00:30:45 · 268 阅读 · 0 评论