自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程池大小设置

线程数如何设置可以参考《Java并发编程实战》这本书给出的建议,如下图:就是这个公式:threads = N CPU * U CPU * (1 + W/C)其中:N CPU 是处理器的核数 U CPU 是期望的CPU利用率(介于0和1之间) W/C是等待时间与计算时间的比率‘网上也有这么区分的:如果服务是cpu密集型的,设置为电脑的核数如果服务是io密集型的,设置为电脑的核数*2其实我觉得并不严谨,尤其是io密集型的还要参考QPS和web服务器的配置。参..

2021-04-21 10:57:13 121

原创 【数据库】验证同一个事务里能否读取到已更新但未提交的数据

在本机启动mysql后来验证该实验。1.本机启动mysql系统偏好设置 -》 MYSQL -》 启动2.命令行登陆mysql/usr/local/mysql/bin/mysql -u root -p3.先查看下数据usemytest;select * from user_info;4.查看隔离级别select @@transaction_isolation;可以看到默认的隔离级别为可重复读。5.查看是否开启了自动提交事务show v...

2021-03-11 21:40:42 7113 10

原创 【JVM】查看GC日志

1.登录机器ssh 10.7.198.22.进入日志目录cd /var/sankuai/logs/该目录的配置对应脚本文件run.sh3.查看gc日志文件ls项目每次启动时会生成对应的gc日志文件,我们最近的一次是sc_c_operation-thriftserver.gc.log.201908061513文件4.打印当前gc的情况tail -f sc_c_operation-thriftserver.gc.log.201908061513..

2020-07-16 19:53:08 3769 1

原创 【JVM】jstat查看gc情况

参考:https://blog.csdn.net/zlzlei/article/details/46471627jstat命令命令格式:jstat [Options] vmid [interval] [count]参数说明:Options,选项,我们一般使用 -gcutil 查看gc情况vmid,VM的进程号,即当前运行的java进程号interval,间隔时间,单位为秒或者毫秒count,打印次数,如果缺省则打印无数次1.登录机器ssh 10.7.198.2.

2020-07-16 19:47:11 694

原创 【JVM】jmap查看内存对象

1.查看存活对象排名jmap -histo:live 519 | head -n 100​2.查看,新生代、老年代、永久代的使用情况。 jmap -heap 519

2020-07-16 19:42:32 931

原创 【JVM】GC问题排查

服务出现频繁younggc 排查过程: falcon中发现younggc升高 jmap -histo:live pid 看到存在大量char[],byte[],string 定位到是日志过多,执行各阶段中的日志和统计日志上报过多 解决方式: 增加执行日志打印开关和白名单,关闭执行日志 统计日志合并上报 经验沉淀: 梳理日志,分必要性控制打印..

2020-07-16 18:59:35 385 1

原创 【JVM】GC参数说明

CUSTOM_JVM_ONLINE=" -server -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.net.preferIPv6Addresses=false -Djava.io.tmpdir=/tmp -Duser.timezone=GMT+0.

2020-07-16 18:58:37 174

原创 【开发经验】git添加忽略规则.gitignore

安装.ignore插件 在.gitignore文件中添加如下内容: 详情规则可参加wiki:https://wiki.sankuai.com/pages/viewpage.action?pageId=1351969172 #vim *.swp #eclipse .classpath .project .settings/ #intellij .idea .idea/ *.iml *.iws #Mac .DS_Store #Maven log/ ..

2020-07-13 15:14:41 154

原创 【JVM】java内存分析

https://www.cnblogs.com/wyb628/p/8566337.htmlthread dump 主要记录JVM在某一时刻各个线程执行的情况,以栈的形式显示,是一个文本文件。通过对thread dump文件可以分析出程序的问题出现在什么地方,从而定位具体的代码然后进行修正。thread dump需要结合占用系统资源的线程id进行分析才有意义。heap dump 主要记录了在某一时刻JVM堆中对象使用的情况,即某个时刻JVM堆的快照,是一个二进制文件,主要用于分析哪些对象占用了太.

2020-07-13 15:14:14 107

原创 《JAVA面试》资料汇总

1、JAVA基础hashMap底层数据结构(1.7与1.8的区别) concurrentHashMap源码(1.7与1.8的区别) 线程池 Lock锁 Synchronized锁 ThreadLocal CAS volatile关键字2、JVMjvm内存模型 垃圾回收算法 垃圾回收器(CMS和G1的区别) 根可达原理 GC问题排查思路3、数据库事务(隔离级别) 聚簇索引和非聚簇索引(覆盖索引) 锁(行锁、间隙锁、next-key锁) 索引结构 B+树、自适应has

2020-07-13 15:13:46 83

原创 【JVM】CPU使用率过高问题排查

1.登录机器ssh 10.24.219.2112.通过top命令定位占用cpu高的进程top可以看到进程ID 519占用CPU频繁​3.只查看该进程的CPU和内存以及负载情况top -p 519​4.通过top命令定位问题进程中每个线程占用cpu情况top -p 519 -H线程PID 2813 CPU占用率最高​5、通过jstack 命令定位问题代码将有问题线程id 2831 转化为16进制printf "%x \n" 2831.

2020-07-12 18:23:41 1071

原创 【网络编程】TCP的三次握手与四次挥手

参考:https://blog.csdn.net/qq_38950316/article/details/81087809第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次.

2020-07-12 18:15:44 116

原创 【分布式】分布式全局唯一ID生成策略

ID生成系统的需求1.全局唯一性:不能出现重复的ID,最基本的要求。2.趋势递增:MySQL InnoDB引擎使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应尽量使用有序的主键保证写入性能。3.单调递增:保证下一个ID一定大于上一个ID。4.信息安全:如果ID是连续递增的,恶意用户就可以很容易的窥见订单号的规则,从而猜出下一个订单号,如果是竞争对手,就可以直接知道我们一天的订单量。所以在某些场景下,需要ID无规则。第3、4两个需求是互斥.

2020-07-12 18:11:32 257

原创 【并发编程】Semaphore

Semaphore翻译成字面意思为信号量。Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。假若一个工厂有5台机器,但是有8个工人,一台机器同时只能被一个工人使用,只有使用完了,其他工人才能继续使用。那么我们就可以通过Semaphore来实现: public static void main(String[] args) { int N = 8; //工人数

2020-07-12 18:07:02 119

原创 【并发编程】CyclicBarrier

字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。CyclicBarrier类位于java.util.concurrent包下,CyclicBarrier提供2个构造器:public CyclicBarrier(int parties, Runnable barrierAction) {}public CyclicBarrier(int parties) {}然后CyclicBarrier中最重要的方法就是await方法,它有2个重载版本:参数parti

2020-07-12 18:05:15 93

原创 【开发经验】如何用命令将本地项目上传到git

1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库git init2、 把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“.”,意为添加文件夹下的所有文件git add .3、用命令 git commit告诉Git,把文件提交到仓库。引号内为提交说明git commit -m 'first commit'4、关联到远程库git remote add origin 你的远程库地址git rem

2020-07-12 17:58:17 114

原创 【JVM】机器常用监控项

1、jvm相关 counter 含义 jvm.memory.used.percent 内存使用总量占比 jvm.memory.eden.used.percent eden使用总量占比 jvm.memory.survivor.used.percent survivor使用总量占比 jvm.memory.oldgen.used.perc

2020-07-12 17:56:22 607

原创 【开发经验】greys排查线下(qa、beta、stage)问题

注意:由于greys影响机器性能,因此不能线上机器使用见git项目 https://github.com/oldmanpushcart/greys-anatomy参考wiki:https://qsli.github.io/2017/11/12/greys/#greys-%E5%AE%89%E8%A3%85https://blog.csdn.net/foolishandstupid/article/details/72849428步骤:1. 安装登录到要追踪的机器$ c.

2020-07-12 17:54:49 332

原创 【并发编程】CountDownLatch

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch类只提供了一个构造器:public CountDownLatch(int count) { }; //参数count为计数值然后下面这3个方法是CountDownLatch类中最重要的方法:public void await..

2020-07-12 13:29:42 74

原创 【JVM】java内存分析

https://www.cnblogs.com/wyb628/p/8566337.htmlthread dump 主要记录JVM在某一时刻各个线程执行的情况,以栈的形式显示,是一个文本文件。通过对thread dump文件可以分析出程序的问题出现在什么地方,从而定位具体的代码然后进行修正。thread dump需要结合占用系统资源的线程id进行分析才有意义。heap dump 主要记录了在某一时刻JVM堆中对象使用的情况,即某个时刻JVM堆的快照,是一个二进制文件,主要用于分析哪些对象占用了太对的堆

2020-07-12 13:25:08 103

原创 《剑指offer》第26题 复杂链表的复制(Java版答案)

题目:复制一个复杂链表。复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个指针可以指向链表中的任意一个结点或者null。答案:分三步1.根据原来的链表的每个结点N,创建对应的N',并将N'连接在N后面,组成一个链表2.对每个N'结点设置副结点,副结点为其前面结点N指向的副结点S,对应的next节点S’3.拆分新旧链表,返回新链表,第一个N节点的下一个结点N'即为新...

2019-06-09 11:49:19 131

原创 《剑指offer》第25题 二叉树中和为某一值的路径(Java版答案)

题目:输入一个二叉树和一个整数,打印出二叉树中的一条路径和为该整数的路径。答案:采用递归的思路。 public void findPath(TreeNode root, int target) { if (root == null) { return; } List<Integer> pat...

2019-05-17 17:55:16 108

原创 《剑指offer》第24题 二叉搜索树的后序遍历序列(Java版答案)

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入数组的任意两个数组都不相同。答案:采用递归的思路。1.根据后序遍历规则,数组的最后一个元素,即为头结点2.那么数组里从头到尾遍历,前面小于的头结点的值,位于树的左子树,后面大于的头结点的值,位于树的右子树。3.找到这个将数组一分为二的位置,然后分别判断左右子树是否是二叉搜索树。 pub...

2019-05-15 20:11:33 77

原创 《剑指offer》第23题 树的层序遍历(Java版答案)

题目:树的层序遍历。答案:借助辅助队列,先进先出先将父节点加入列表。每次从列表中,取出节点进行遍历。每次遍历节点后,若节点存在左子节点,则将左子节点加入队列;若节点存在右子节点,则将右子节点加入队列;遍历直至列表为空。 public void layerTraverse(TreeNode root) { if (root == nul...

2019-05-11 20:30:22 121

原创 《剑指offer》第22题 栈的压入、弹出序列(Java版答案)

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。示例:压栈序列:1、2、3、4、5序列4、5、3、2、1是一个弹出序列序列4、3、5、1、2不是一个弹出序列答案:借助辅助栈将压栈数组先入辅助栈,每次入栈后均去判断是否是弹出序列要弹出的元素若是,则从辅助栈中弹出元素,然后继续判断下一个元素能否...

2019-05-11 20:17:57 148

原创 《剑指offer》第21题 包含min函数的栈(Java版答案)

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素min函数。在该栈中调用min、push及pop的时间复杂度都是O(1)。答案:借助辅助栈,辅助栈栈顶保留最小值比如压入5,3,6,2,4先压入5,辅助栈也压入5.压入3,由于3比5小,则辅助栈压入3压入6,由于6比目前辅助栈中的最小值3大,则辅助栈压入3.压入2,由于2比目前辅助栈中的最小值3小,则辅...

2019-05-08 20:38:23 87

原创 《剑指offer》第20题 顺时针打印矩阵(Java版答案)

题目:输入一个矩阵,按照从外到里以顺时针的顺序依次打印出每一个数字。示例:1 2 3 45 6 7 89 10 11 1213 14 15 16结果打印 1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10答案:每次循环打印一圈,能否继续打印一圈的判断条件是rows > 2 * start && columns &g...

2019-05-08 20:38:09 71

原创 《剑指offer》第19题 二叉树的镜像(Java版答案)

题目:输入一个二叉树,输出它的镜像。答案:递归public void mirrorTree(TreeNode root) { if (root == null) { return; } //交换根结点的左右节点 TreeNode temp = root.left; ...

2019-05-07 11:58:19 101

原创 《剑指offer》第18题 树的子结构(Java版答案)

题目:输入两颗二叉树A和B,判断B是不是A的子结构。答案:递归第一步,在树1中找到和树2的根结点的值一样的结点R第二步,判断树1中以R为根结点的子树是不是包含和树2一样的结构。public boolean isSubTree(TreeNode root1, TreeNode root2) { if (root1 == null) { ...

2019-05-07 11:57:37 78

原创 《剑指offer》第17题 合并两个排序的链表(Java版答案)

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。答案:递归public ListNode mergeListNode(ListNode head1, ListNode head2) { if (head1 == null) { return head2; } if (hea...

2019-05-07 11:56:59 94

原创 《剑指offer》第16题 反转链表(Java版答案)

题目:输入一个链表,反转该链表,并输出反转后链表的头结点。答案:public ListNode reverseListNode(ListNode head) { if (head == null) { return null; } ListNode p1 = head; ListNode p2 ...

2019-05-07 11:56:29 102

原创 《剑指offer》第15题 链表中倒数第K个结点(Java版答案)

题目:输入一个链表,输出链表中倒数第K个结点。答案:常规思路就是要经过两次遍历,不够高效。先遍历一遍链表,得到链表的长度n,再减去k,得到结点的正数位置,最后再遍历得到这个结点。双指针法。只需要遍历一次链表第一个指针p1先走k步然后第二个指针p2与p1同时走,这样p1和p2之间一直保持k个结点的距离。因此直到p1走到最后一个结点,此时p2正好位于倒数第k个结点...

2019-05-07 11:55:34 77

原创 《剑指offer》第14题 调整数组顺序,使奇数位于偶数前面(Java版答案)

题目:输入一个整数数组,实现函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分。答案:头尾各一个指针,若头部指针指向的是奇数,则后移;指向偶数时停止移动若尾部指针指向的是偶数,则前移;指向奇数时停止移动交换头尾指针指向的数字。public void adjustArray(int[] array) { if (a...

2019-05-07 11:54:53 122

原创 《剑指offer》第13题 在O(1)时间删除链表结点(Java版答案)

题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)的时间删除该结点。答案:如果要遍历到要删除节点的上一个节点,再去删除,则需要O(n)的时间复杂度了因此我们考虑删除deletedNode的下一个节点,只是把下一个节点的值赋值给deletedNode,这样就相当于删除了deletedNode。注意deletedNode可能是尾节点,则只能遍历了。publi...

2019-05-07 11:54:16 89

原创 《剑指offer》第12题 打印1到最大的N位数(Java版答案)

题目:输入数字n,按顺序打印出从1到最大的n位十进制数。示例:输入3打印1、2、3直到最大的3位数999。答案:需要考虑大数问题 方法一:常规思路 采用数组模拟加法/** * 方法一:考虑大数问题,采用数组模拟加法 * * @param n */ public void print1toN(int n) { ...

2019-05-07 11:53:30 145

原创 《剑指offer》第11题 数值的整数次方(Java版答案)

题目:实现函数,求base的exponent次方。不得使用库函数,不用考虑大数问题。示例:base = 2;exponent = 3输出为2的3次方,8。答案:常规思路,不够高效/** * 常规思路,不够高效 * 注意代码的健壮性 */ public double Power(double base, int exponent...

2019-05-07 11:51:29 110

原创 《剑指offer》第10题 二进制中的1(Java版答案)

题目:实现一个函数,输入一个整数,输出该数二进制表示中1的个数。示例:9表示为二进制是1001,有2位是1因此输出为2.答案:9的二进制是1111,&8 1111 & 1110 为1110&7 1110 & 1101 为1100&6 1100 & 1010 为1000&5 1000 & 0111...

2019-05-07 11:50:19 91

原创 剑指offer 面试题9 斐波那契数列 java版答案

package OfferAnswer;/** * 面试题09 * 斐波那契数列 * @author lwk * */public class Answer09 { public static void main(String[] args) { long start = System.currentTimeMillis(); System.out.println(Fibo

2016-11-15 17:25:24 351

原创 剑指offer 面试题8 旋转数组的最小值 java版答案

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序数组的一个旋转,输出旋转数组的最小值。示例:数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转该数组的最小值为1。答案:一般情况 {3,4,5,1,2},二分查找特殊情况一 : {1,1,1,0,1}或{1,0,1,1,1},只能顺序查找特殊情况二 : {1,2,3...

2016-11-15 17:02:50 320

原创 剑指offer 面试题7 两个栈实现队列 java版答案

package OfferAnswer;import java.util.Stack;/** * 面试题7 * 两个栈实现队列 * @author lwk * */public class Answer07 { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void add(in

2016-11-15 11:26:43 313

空空如也

空空如也

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

TA关注的人

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