7 徐海兴

尚未进行身份认证

我要认证

爱好java,分布式开发

等级
TA的排名 6k+

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

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

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

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

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

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

limit优化

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

2020-03-23 12:24:04

Spring后置处理器

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

2020-03-15 21:44:28

kafka生产者实例配置参数

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

2020-03-14 16:42:44

kafka生产者原理分析

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

2020-03-14 16:29:29

为什么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

为什么计算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

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

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

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

cpu100%问题定位

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

2020-03-07 13:52:39

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

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

HotSpot的算法实现

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

2020-02-08 12:31:37

垃圾收集算法

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

2020-02-08 12:24:13

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。