Java
frcoder
FRLH
展开
-
【Java工具类】OkHttp工具类
【代码】【Java工具类】OkHttp工具类。原创 2024-02-04 23:55:19 · 1557 阅读 · 0 评论 -
【Java工具类】命令行处理工具类
【代码】【Java工具类】命令行处理工具类。原创 2024-02-04 23:53:48 · 410 阅读 · 0 评论 -
【Java工具类】命令行处理框架
【代码】【Java工具类】命令行处理框架。原创 2024-02-02 00:45:23 · 496 阅读 · 1 评论 -
日志收集器
一款简易的日志收集器,可以记录上下文,及收集时间打点。原创 2023-03-01 00:10:47 · 246 阅读 · 1 评论 -
解析word文件的简单实现
一、了解word结构推荐文章:《Office文件格式基础知识》、《Anatomy of a WordProcessingML File》office 97-03office 97-03的存储规范为OLE。它是一种对象链接和嵌入的技术,该技术可以包含文本,图形,电子表格甚至其他二进制数据。office 07-*Doc文件的格式规范为OpenXML(OOXML),是微软在Office 2007中提出的一种新的文档格式。Office 2007中的Word、Excel、PowerPoint默认均采用原创 2020-12-29 00:03:17 · 5855 阅读 · 0 评论 -
对于设计模式的理解
设计模式实际上就六个字:高内聚,低耦合一、设计模式的六大原则单一职责接口隔离原则(Interface Segregation Principle)这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。最少知道原则,又称迪米特法则(Demeter Principle)最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统.原创 2020-11-26 14:42:24 · 494 阅读 · 0 评论 -
【java编程(在线笔试)】【动态规划】背包问题
/** * 背包问题(0-1背包) * <p> * 给你一个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两个属性。其中第 i 个物品的重量为 wt[i],价值为 val[i],现在让你用这个背包装物品,最多能装的价值是多少? * * @author frlh * @create 2020/06/21 15:26 */public class T10 { public static int maxPrice(int N, int W, int[] ws,原创 2020-10-19 00:05:49 · 258 阅读 · 0 评论 -
【java编程(在线笔试)】【滑动窗口】最小覆盖子串
import java.util.HashMap;import java.util.Map;import java.util.HashMap;import java.util.Map;/** * 最小覆盖子串 * <p> * 在s中寻找包含t中所有元素的最小子串 * * @author frlh * @create 2020/06/21 15:26 */public class T8 { static String minWindow(String s, S原创 2020-10-18 13:22:36 · 113 阅读 · 0 评论 -
【java编程(在线笔试)】【BFS广搜】密码锁
import java.util.*;/** * 密码锁 * * @author frlh * @create 2020/06/21 15:26 */public class T6 { static String plusOne(String s, int i) { StringBuffer ss = new StringBuffer(s); char c = s.charAt(i); if (c == '9') c = '0';原创 2020-10-18 13:17:28 · 225 阅读 · 1 评论 -
【java编程(在线笔试)】【BFS广搜】二叉树的最小高度
import java.util.LinkedList;import java.util.Queue;/** * 二叉树的最小高度 * * @author frlh * @create 2020/06/21 15:26 */public class T5 { static class Node { int value; Node left; Node right; public Node(int value) {原创 2020-10-18 12:55:22 · 174 阅读 · 0 评论 -
【java编程(在线笔试)】【回溯】n皇后
import java.util.ArrayList;import java.util.List;/** * n皇后 * * @author frlh * @create 2020/06/21 15:26 */public class T4 { static int n = 8; static List<Integer> track = new ArrayList<>(); public static boolean test(int i原创 2020-10-18 12:52:16 · 89 阅读 · 0 评论 -
【java编程(在线笔试)】【回溯】全排列
import java.util.ArrayList;import java.util.List;/** * 全排列 * * @author frlh * @create 2020/06/21 15:26 */public class T3 { static List<Integer> track = new ArrayList<>(); public static void f(List<Integer> nums) {原创 2020-10-18 12:46:34 · 110 阅读 · 0 评论 -
【java编程(在线笔试)】【动态规划】找零钱-最少需要多少枚钱
import java.util.HashMap;import java.util.Map;/** * 找零钱-最少需要多少枚钱 * * @author frlh * @create 2020/06/21 15:26 */public class T2 { public static int f(int[] coins, int amount) { if (amount < 0) return -1; if (amount == 0) ret原创 2020-10-18 12:44:15 · 160 阅读 · 0 评论 -
【java编程(在线笔试)】【动态规划】找零钱-有多少种方案
/**找零钱方案数@author frlh@create 2020/06/21 15:26*/public class T1 {public static int change(int amount, int[] coins) {return change(amount, coins, 0);}public static int change(int amount, int[] coins, int index) {if (amount == 0) {return 1;原创 2020-10-18 12:42:27 · 254 阅读 · 0 评论 -
【java编程(在线笔试)】二分搜索模板
/** * 二分搜索模板 * <p> * 注意:有序集合才可以用二分搜索 * * @author frlh * @create 2020/10/18 12:19 */public class T0 { // 二分搜素,查找某个元素 static int bs(int[] nums, int target) { int l = 0, r = nums.length - 1; while (l <= r) {原创 2020-10-18 12:31:34 · 123 阅读 · 1 评论 -
【java编程(在线笔试)】【动态规划模板】斐波那契数列
public class C { public static int f(int n) { if (n == 1 || n == 2) return 1; return f(n - 1) + f(n - 2); } public static int f1(int n) { Integer[] tmp = new Integer[n + 1]; return f1_(n, tmp); } publ.原创 2020-10-18 11:48:19 · 153 阅读 · 0 评论 -
【java编程(在线笔试)】【链表】链表的拆分、反转、合并
/** * @author frlh * @create 2020/06/07 22:10 */public class Main1 { static class Node { int value; Node next; public Node(int value, Node next) { this.value = value; this.next = next; }原创 2020-10-18 11:46:20 · 170 阅读 · 0 评论 -
java线程相关
一、线程基础1. 线程的状态Java中线程的状态分为6种:初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。阻塞原创 2020-10-16 09:45:02 · 122 阅读 · 0 评论 -
java的类加载原理
一、什么是类加载虚拟机把描述类的数据加载到内存里面,并对数据进行校验、解析和初始化,最终变成可以被虚拟机直接使用的class对象。类加载的过程是什么?主要分为以下几个过程:加载、验证、准备、解析、初始化;加载:加载分为三步:1、通过类的全限定性类名获取该类的二进制流;2、将该二进制流的静态存储结构转为方法区的运行时数据结构;3、在堆中为该类生成一个class对象;验证:验证该class文件中的字节流信息复合虚拟机的要求,不会威胁到jvm的安全;准备:为class对象的静态转载 2020-09-16 23:08:48 · 145 阅读 · 0 评论 -
java中最大值和最小值的溢出问题
两个区间[最小值,-1]:[1-0000,1-1111][0, 最大值]:[0-0000,0-1111]为什么要这样设计为什么要引入两个区间?为什么负数区间和正数区间设计成对称的,比如[1-1111,1-0000]?直接把正数的符号位改成1表示负数,不可以么?为什么要引入补码?为什么不直接使用反码?所有问题的答案都是为了统一负数和正数的加法运算。只有目前这种设计才能实现 -1加1变成0 。你品你细品~这种设计的副作用1. 溢出问题最大值+1,即0-1111加0-0001,变成1-0原创 2020-08-26 11:32:38 · 1328 阅读 · 0 评论 -
java中一个对象 在内存中、数据库中、序列化后 占用的空间是一样的么
答:不一样。protobuf序列化=数据库<≈内存<json序列化解释:protobuf序列化、数据库:都是使用了最紧凑的形式用二进制来存储对象。内存:也是使用了最紧凑的形式用二进制来存储对象,但是多了对象头的结构。json序列化:将对象转成了文本(字符串);并且为了表意清楚,每个属性都带上了属性名。所以,现在有个趋势,注重传输效率的场景,正在用protobuf序列化代替json序列化...原创 2020-08-26 10:04:17 · 953 阅读 · 0 评论 -
java字符串在内存和文件中编码的不同——如何理解进制(二进制)与编码(UTF-8)的关系
不管是在内存中,还是文件中,还是网络传输中,计算机运算和存储的都只能是二进制。内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码;外码是程序与外部交互时外部使用的字符编码。“外部”相对“内部”而言;不是char或String在内存里用的内部编码的地方都可以认为是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令行参数之类的。Java语言规范规定,Java的char类型是UTF-16的code unit,也就是一定..原创 2020-08-26 09:43:39 · 1646 阅读 · 0 评论 -
【java编程(在线笔试)】【链表】两道k个一组翻转链表题目(包含非递归和递归两种解法)
一、给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点也反转顺序。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode原创 2020-07-27 14:16:14 · 223 阅读 · 0 评论 -
【java编程(在线笔试)】【运算】大数相加
1. 大数相加import java.util.ArrayList;import java.util.List;import java.util.Random;/** * @author frlh * @create 2020/06/07 15:58 */public class Main { static Random random = new Random(); // 核心方法 public static String sum(String a, Strin原创 2020-06-07 18:00:30 · 245 阅读 · 0 评论 -
【java编程(在线笔试)】常用工具类
import java.util.*;public class Help { /** * 数学计算 */ public static void mathHelp() { System.out.println("\n\nmathHelp:--------------------------\n"); System.out.println(Math.random()); // Math.random()返回double[0.0,1.0原创 2020-06-07 17:46:02 · 254 阅读 · 0 评论 -
java线程池中的Worker关键源码
每个Worker主动去workQueue队列里取任务,如果取到任务了就执行如果没取到,得分以下几种情况:线程池的线程数大于corePoolSize,非核心线程在等待keepAliveTime后关闭线程池的线程数小于corePoolSize时:如果设置了allowCoreThreadTimeOut = true,核心线程在等待keepAliveTime后,也会关闭如果没有设置allowCoreThreadTimeOut(默认为false),则核心线程阻塞,等待任务到来Worker关.原创 2020-05-28 10:29:48 · 293 阅读 · 0 评论 -
hystrix源码解析——超时中断
ExecutionIsolationStrategy.THREAD模式下,主函数调用远程接口超过hystrix超时时间,会中断远程接口的调用,立刻抛出超时异常,触发回调ExecutionIsolationStrategy.SEMAPHORE模式下,主函数调用远程接口超过hystrix超时时间,不会中断远程接口的调用,而是等调用完成之后再抛出超时异常,触发回调abstract class AbstractCommand<R> implements HystrixInvokableInfo&.原创 2020-05-20 18:08:25 · 731 阅读 · 0 评论 -
看tomcat源码的一点理解
http连接的表现就是socket对象客户端连接服务端时,先随机分配一个端口去连接服务器的80端口,然后服务器会另外随机分配一个端口与客户端通信,该端口由一个socket持有。在程序上的表现就是:当这个socket还存在,就意味着客户端和服务端还在建立连接;反之,即断开连接。通常情况下,连接会被很快的处理完,然后断开。当客户端再次需要请求服务器资源数,再重新经历上面的过程进行连接。这时客户...原创 2017-05-04 12:39:30 · 1682 阅读 · 0 评论 -
hystrix源码解析——FallbackMethod是如何接收异常的
一、方法1. fallbackMethod不接收异常@Servicepublic class HelloService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hiError") public String hiService(String name) { return restTemplate.getForObject("http://SER原创 2020-05-15 12:09:08 · 1782 阅读 · 0 评论 -
记录一次线上内存问题的排查过程
所用工具MAT、IDEA一、发现问题线上有一个微服务内存已经将近90%,回收不过来,导致频繁gc,cpu也跟着从20%升至40%。先临时升级机器内存,情况得到缓解,内存回到50%,cpu也降了下来,但是内存还在缓慢增长。二、定位问题第一步:怀疑有内存泄露。连续2天,dump了2份该微服务内存。发现有一个ConcurrentHashMap持有的内存特别大,占整个堆内存的一半。查看这个类下具体的对象内容,发现它的key是dubbo.monitor下的Statistics类。查看dubbo源.原创 2020-05-09 12:19:40 · 1678 阅读 · 1 评论 -
java拾遗
1. java方法的泛型,也可以由返回值决定,比如下面的代码。 public static <T> T getBean(String name) throws BeansException { return (T) beanFactory.getBean(name); } // 由Summary hotDataBucketSizeSummar...原创 2020-03-17 14:30:38 · 100 阅读 · 0 评论 -
java中的空指针异常
1. 链式调用尤其是在链式get某个属性时,要注意中间节点可能为空。String version = "UNKNOWN";if (computer != null) { Soundcard soundcard = computer.getSoundcard(); if (soundcard != null) { USB usb = soundcard.getU...原创 2020-01-08 10:41:26 · 253 阅读 · 0 评论 -
避免大批量查询
一、大批量查询的危害尽量避免出现大批量查询(1000条以上),否则系统中会出现对象的大数组,因为无论它的构建,转换,传输,解析,缓存都会消耗特别多的资源,包括CPU、内存、IO。其中,所有的行为都会消耗内存,转换和解析需要CPU,传输需要IO。数据库中1M的数据,在内存中可能会占用100M。原因如下:构建数据库中存的是文本信息,构建成对象之后,对象以及对象的每个属性(属性也是对象)都会占用...原创 2019-12-12 17:12:25 · 563 阅读 · 0 评论 -
用代码说明java的继承关系
public class Main { public static void main(String[] args) { Father ts1 = new Son(); System.out.println("==="); Father ts2 = new Son(); }}class Father { { ...原创 2019-11-28 10:18:34 · 367 阅读 · 0 评论 -
后台实践细节
关于check函数check函数建议返回void,如果发现不符合条件,可以抛出异常。异常可以携带更多的信息,便于输出日志,定位问题。原创 2019-11-25 18:22:57 · 78 阅读 · 0 评论 -
spring Boot测试的最佳实践和测试架构的启发(JUnit4和mockito,包括MockMvc)
1. JUnit4请看这里:Junit4 简单教程和Spring Boot Junit单元测试2. mockito(包括MockMvc)请看这里:强大的Mockito测试框架和Junit学习笔记之五:MockMVC3. 最佳实践Jar包版本说明:junit:junit:4.12, org.mockito:mockito-core:1.10.193.1 JU...原创 2017-10-25 18:44:32 · 6596 阅读 · 0 评论 -
hibernate中的“坑”
1. 新建时save()接口返回的对象就是参数对象所以如果想利用保存来获取数据里各个字段默认值的时候要小心。比如下面的例子。class A { protected Long id; protected LocalDateTime createTime; protected LocalDateTime updateTime;}A a=save(new A());/...原创 2019-11-16 18:32:31 · 242 阅读 · 0 评论 -
Java源码的理解
1. HashMap什么时候会扩容?答:有两种情况。(1) 元素数目 > 容量*负载因子;(2) 当元素数目 TREEIFY_THRESHOLD。2.HashMap什么时候会树化?答:当元素数目 > MIN_TREEIFY_CAPACITY时,如果有某个桶的元素数量 > TREEIFY_THRESHOLD。原创 2017-08-29 16:29:43 · 434 阅读 · 0 评论 -
java基础-类元素的初始化与继承多态
java类中各元素的初始化顺序:1.先静态域,后普通代码2.先父类代码,后子类代码3.在普通代码中,先普通域,后构造函数4.在普通域或静态域中,都是按顺序执行(比如,可以先初始化成员1,执行普通构造块,初始化成员2)具体过程如下:-------------1.父静态域2.子静态域-------------3.父普通域4.父构造函数原创 2017-08-23 19:13:21 · 308 阅读 · 0 评论 -
程序基础知识问答记录
程序基础知识问答记录原创 2017-08-22 23:42:18 · 321 阅读 · 0 评论