自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(337)
  • 资源 (3)
  • 论坛 (2)
  • 收藏
  • 关注

原创 leetcode 25 Reverse Nodes in k-Group

给一个链表,每k个节点一组进行反转,输出反转后的链表hard难度,但突破点很好找,具体解体思路,看下面代码中每行注释public class LC25 { public static void main(String[] args) { ListNode listNode = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5, null)

2020-11-11 23:09:18 57

原创 343. Integer Break

把一个整数拆分成至少两个正整数的和,要求拆分后的整数的乘积最大。Example 1:Input: 2Output: 1Explanation: 2 = 1 + 1, 1 × 1 = 1.Example 2:Input: 10Output: 36Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.动态规划数值大的依赖于数值小的,所以找到状态转移公式很重要。bp[i] = Math.max(j * bp[i - j], j *(i - j))cla

2020-05-13 23:10:04 80

原创 leetcode64. Minimum Path Sum

给一个非负数二维数组,从左上到右下,最短的路径只能向右或者向下走Example:Input:[ [1,3,1], [1,5,1], [4,2,1]]Output: 7Explanation: Because the path 1→3→1→1→1 minimizes the sum.动态规划这里面存在一个问题,要想求出下一步的最短距离,必须求出上一步的最短距离边界:mins[0][0] = grid[0][0]状态转移公式3个:grid[0]那一排,依赖于左侧grid

2020-05-12 22:54:51 82

原创 leetcode 120. Triangle

给一个三角形,寻找一个从顶到底的最小的路径和,只能是临近的数字的和[ [2], [3,4], [6,5,7], [4,1,8,3]]The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).解题思路动态规划每一层都依赖于上一层按照从上到下,从右到左的顺序,一层一层的求开一个int[] f = new int[triangle.size()];这么大的空间重复利用就可以了cl

2020-05-11 23:11:25 80

原创 leetcode5.Longest Palindromic Substring

返回最长回文串Example 1:Input: "babad"Output: "bab"Note: "aba" is also a valid answer.Example 2:Input: "cbbd"Output: "bb"解题思路:定义下标i,j,boolean dp[i][j]动态规划思想:要求大的,先求小的边界:dp[i][j] = truei ==j 单个字符一定为truestr[i] == str[j]&&j-i ==1 两个挨着的字符相等

2020-05-10 22:39:06 65

原创 mysql8.0主从搭建

mysql版本 8.0.19 docker与非docker配置修改一样1. 主节点[xuhaixing@xhx151 ~]$ docker run --name mysql-master1 --privileged=true -v /opt/module/docker/mysql/master1:/var/lib/mysql -p 3307:3306 -d -e MYSQL_ROOT_PA...

2020-03-27 21:13:34 133

原创 mysql单机安装-centos

进入官网https://dev.mysql.com/downloads/,选择MySQL Yum Repository,下载合适自己系统的版本 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm安装 sudo rpm -ihv mysql80-community-release-el7-3.noar...

2020-03-27 21:11:07 87

原创 limit优化

limit优化limit 100000,20的意思是扫描满足条件的100020行,扔掉前面的100000行,返回最后20行。所以偏移量越大,查询性能越差。举例:默认全表扫描加入order by field, field必须有索引​ type变成了index记录上次的最大id,用id做范围查询嵌套查询也是一种方法总结:先找出第一条符合条件的i...

2020-03-23 12:24:04 123

原创 Spring后置处理器

1. BeanPostProcessorpublic interface BeanPostProcessor { @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Nullabl...

2020-03-15 21:44:28 150

原创 kafka生产者实例配置参数

KafkaProducer中有三个参数是必填的:bootstrap.servers: 指定生产者客户端连接kafka集群所需的broker地址列表,格式为host1:port1,host2:port2,可以设置一个或多个。这里并非需要所有的broker地址,因为生产者会从给定的broker里寻找其它的broker。key.serializer和value.serializer:broker接收...

2020-03-14 16:42:44 1093

原创 kafka生产者原理分析

生产者客户端整体架构:​ 整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和Sender线程(发送线程)。在主线程中由KafkaProducer创建消息,然后通过可能的拦截器、序列化器和分区器的作用之后缓存到消息累加器(RecordAccumulator,也称为消息收集器)中。Sender线程负责从RecordAccumulator中获取消息并将其发送到kafka中。​ Rec...

2020-03-14 16:29:29 177

原创 为什么HashMap的容量要是2的幂

看一下HashMap的get()方法 public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; } final Node<K,V> getNode(int hash, Object k...

2020-03-10 22:33:01 118

原创 为什么计算hashcode用31*

String的hashcode()方法 public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.len...

2020-03-10 22:19:44 58

原创 Semaphore源码解析

1. 构造函数 public Semaphore(int permits) { sync = new NonfairSync(permits); } public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync(permits) : new NonfairS...

2020-03-08 16:37:36 59

原创 CyclicBarrier源码解析

1. 先看一下构造函数public CyclicBarrier(int parties, Runnable barrierAction) { if (parties <= 0) throw new IllegalArgumentException(); this.parties = parties; this.count = parties; this.ba...

2020-03-07 22:28:31 70

原创 CountDownLatch源码解析

1. 首先看一下CountDownLatch的构造函数 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count); }然后看一下Sync类,...

2020-03-07 21:11:21 56

原创 cpu100%问题定位

cpu100%问题定位程序中写一个死循环 thread = new Thread(() -> { while (true) { } }); thread.start();top -c显示进程运行详细列表键入P可以按照cpu使用率排序可以用top -p pid定位到当前进程按H,切换到线程,这时显示的是一个进程的线程信息表,这时左上角显示的Thread...

2020-03-07 13:52:39 432

原创 OutOfMemory问题定位

内存溢出定位程序加入启动参数-Xms30M -Xmx30M -XX:+HeapDumpOnOutOfMemoryError加入下面代码 while (true) { //0.5M byte[] chars = new byte[1024 * 512]; list.add(chars); Thread.sleep(1500); }OOM时会打印java_pid...

2020-03-07 13:49:16 194

原创 redis分布式锁原理

以redisson为例 RLock lock = redissonClient.getLock(key); lock.lock(timeoutSecond, TimeUnit.SECONDS);原则:1.自己加的锁自己释放,2.锁到期了业务没执行完还需续期1. 加锁时执行lua脚本 "if (redis.call('exists', KEYS[1])...

2020-02-26 18:37:38 153

原创 HotSpot的算法实现

枚举根节点​ 由于目前的主流Java虚拟机使用的都是准确式GC,当执行系统停顿下来后,并不需要一个不漏地检查完所有执行上下文和全局的引用位置,虚拟机应当是有办法直接得知哪些地方存放着对象引用。​ 在HotSpot的实现中,是使用一组称为OopMap的数据结构来达到这个目的的,在类加载完成的时候,HotSpot就把对象内什么偏移量上是什么类型的数据计算出来,在JIT编译过程中,也会在特定的位置记...

2020-02-08 12:31:37 269

原创 垃圾收集算法

标记-清除算法​ Mark-Sweep​ 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。​ 由两个不足:效率问题标记和清除两个过程的效率都不高空间问题标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。复制算法​ 为了解决效率问题,一种称为...

2020-02-08 12:24:13 59

原创 回收方法区

​ 主要回收两部分内容:废弃的常量和无用的类。​ 回收废弃常量:与回收Java堆中的对象非常类似。以常量池中字面量的回收为例,假如一个字符串"abc"已经进入了常量池中,但是当前系统没有任何一个String对象是叫做"abc"的,换句话说,就是没有任何String对象引用常量池中的"abc"常量,也没有其他地方引用了这个字面量,如果这时发生内存回收,而且必要的话,这个"abc"常量就会被系统清理...

2020-02-08 12:14:11 77

原创 引用类型

强引用​ 强引用就是指在程序代码之中普遍存在的,类似"Object obj=new Object()"这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。软引用​ 软引用是用来描述一些还有用但并非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK 1.2...

2020-02-08 12:06:30 60

原创 判断对象是否存活

引用计数法​ 互相引用会无法回收可达性分析法​ 通过一系列的GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。​ 可作为GC Roots的对象:虚拟机栈(栈帧中本地变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对...

2020-02-08 11:53:53 63

原创 对象的访问定位

​ 建立对象是为了使用对象,Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和指针两种。​ 1. 如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为...

2020-02-08 11:44:13 45

原创 对象的内存布局

​ 在HotSpot虚拟机中对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对其填充(Padding)​对象头​ 对象头包括三部分第一部分Mark Word,用于存储对象自身的运行时数据,哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳。这部分数据在长度为32位和64位的虚拟机中分别为32bit和64bi...

2020-02-08 11:36:20 45

原创 对象的创建过程

虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须执行相应的类加载过程。类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存的大小在类加载完成后便可完全确定。内存分配又有两种方式:指针碰撞(Bump the Pointer)和空闲列表(Free List)。选...

2020-02-08 11:28:47 81

原创 运行时数据区

程序计数器​ Program Counter Register​ 在虚拟机概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。​ 线程私有,此区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。​ 如果线程正在执行的是一个java方法,这个计...

2020-02-08 10:53:53 46

原创 Executors

1. 介绍线程池工厂,在实际生产环境中,线程的数量必须得到控制,盲目的大量创建线程对系统性能是有伤害的。2. 主要方法2.1 newFixedThreadPool()​ 该方法返回一个固定线程数量的线程池,该线程池中的线程数量始终不变,当有一个新的任务提交时,线程池中若有空闲线程,则立即执行,若没有,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。线程数固定...

2020-02-07 12:28:17 233

原创 阻塞队列介绍

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2)支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放...

2020-02-07 12:10:55 71

原创 CyclicBarrier

1. 介绍​ 它可以实现线程间的计数等待,并且可以循环计数。每凑齐一批后又可以继续重新计数。2. 构造函数public CyclicBarrier(int parties);public CyclicBarrier(int parties, Runnable barrierAction);3. 示例集合完毕会执行回调方法,任务完成也会再执行一个回调方法。public class T...

2020-02-07 11:32:21 42

原创 CountDownLatch

1. 介绍通常用来控制线程的等待,可以理解为一个倒计数工具。它可以让一个线程等待直到倒计数结束,再开始执行。计数只能减,不能增。2. 构造函数public CountDownLatch(int count);接收一个整数作为参数,即当前计数器的计数个数3. 案例主线程在CountDownLatch上等待,所有任务完成后,主线程方能继续执行。public class Test01 {...

2020-02-07 11:22:32 44

原创 Semaphore

1.介绍信号量为多线程协作提供了更为强大的控制方法。广义上说信号量是对锁的扩展,可以指定多个线程同时访问某一资源。2. 构造方法 public Semaphore(int permits) { sync = new NonfairSync(permits); } public Semaphore(int permits, boolean fair) ...

2020-02-07 11:17:48 31

原创 CAS原理

​ compareAndSet()方法调用简称为CAS。JDK文档对该方法的说明如下:如果当前状态值等于预期值,则以原子方式将同步状态设置为给定的更新值。此操作具有volatile读和写的内存语义。​ 编译器不会对volatile读与volatile读后面的任意内存操作重排序;编译器不会对volatile写与volatile写前面的任意内存操作重排序。组合这两个条件,意味着为了同时实现volat...

2020-02-07 11:09:27 37

原创 LockSupport示例

1. 介绍LockSupport是一个非常方便实用的线程阻塞工具,它可以在线程内任意位置阻塞线程。和Thread.suspend()相比,它弥补了由于resume()发生在前,导致线程无法继续执行的情况。和Object.wait()相比,它不需要先获得某个对象的锁,也不会抛出InterruptedException异常。2. 主要方法都是静态方法public static void par...

2020-02-06 23:01:29 66

原创 LockSupport

​ 当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport也成为构建同步组件的基础工具。​ 在Java 6中,LockSupport增加了park(Object blocker)、parkNanos(Object blocker,long nanos)...

2020-02-06 22:53:04 29

原创 独占式超时获取同步状态

​ 通过调用同步器的doAcquireNanos(int arg,long nanosTimeout)方法可以超时获取同步状态,即在指定的时间段内获取同步状态,如果获取到同步状态则返回true,否则,返回false。超时获取同步状态过程可以被视作响应中断获取同步状态过程的“增强版”,doAcquireNanos(int arg,long nanosTimeout)方法在支持响应中断的基础上,增加了...

2020-02-06 22:28:24 104

原创 共享式同步状态获取与释放

共享式获取与独占式获取最主要的区别在于同一时刻能否有多个线程同时获取到同步状态public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg);}​ 在acquireShared(int arg)方法中,同步器调用tryAcquireSh...

2020-02-06 22:24:00 45

原创 独占式同步状态获取与释放

​ 通过调用同步器的acquire(int arg)方法可以获取同步状态,该方法对中断不敏感public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfI...

2020-02-06 22:15:00 100

原创 AQS之同步队列

同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成为一个节点(Node)并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态设置尾节点​​ 同步队列遵循FIFO,首节点是获取同步状态成功的节点,首节点的线程在释放同步状态时,将会唤醒后继节点,而后...

2020-02-06 21:47:21 671

springcloud jar包转war包 demo

eureka,zuul,springclod jar转 war 自己做的示例,放到tomcat中运行,博客地址 http://blog.csdn.net/u012326462/article/details/79055652

2018-01-14

JSP页面的基本结构——求圆面积周长预习报告

JSP页面的基本结构——求圆面积周长预习报告,哈哈哈哈,欢迎大家下载,预习报告。

2015-12-28

JSP页面的基本结构——求圆面积周长

实验报告jsp,求院的周长和面积

2015-12-28

徐海兴的留言板

发表于 2020-01-02 最后回复 2020-05-14

poj2840一直RE,找不出错误,求解

发表于 2014-08-12 最后回复 2014-09-06

空空如也

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

TA关注的人 TA的粉丝

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