- 博客(50)
- 资源 (1)
- 收藏
- 关注
原创 gdb打印信息输出命令
将GDB中需要的调试信息输出到文件(gdb) set logging file <文件名>(gdb) set logging on(gdb) thread apply all bt(gdb) set logging off(gdb) quit详细说明:1、# (gdb) set logging file <文件名>设置输出的文件名称2、# (gdb) set logging on输入这个命令后,此后的调试信息将输出到指定文件3、# (gdb) thread ap
2020-09-21 09:05:54
3416
原创 golang中接口的内部实现
iface 数据结构非空接口初始化的过程就是初始化一个iface类型的结构,示例如下://src/runtime/runtime2.gotype iface struct {tab*itab/litab 存放类型及方法指针信息data unsafe.Pointer //数据信息}可以看到iface结构很简单,有两个指针类型字段。.itab:用来存放接口自身类型和绑定的实例类型及实例相关的函数指针,具体内容后面有详细介绍。数据指针data:指向接口绑定的实例的副本,接口的初始化也是一种值拷
2020-09-03 20:11:00
337
原创 golang中net/http中handler笔记
http.Handle("/",nil) http.HandleFunc("/",nil)先看第一个方法func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) }handler接口type Handler interface { ServeHTTP(ResponseWriter, *Request)}实际调用的handle方法// Handle regi.
2020-08-31 10:27:21
1009
原创 [mysql] Access denied for user ‘root’@’localhost’ (using password: YES) 的问题解决:恢复root权限
故障现象:ROOT账户可以连接数据库,但在操作时候或再次登陆出现如下提示:Access denied for user ‘root’@‘localhost’ (using password: YES)这时候,确定密码是正确的,但是root账户无法正常操作数据库。一般情况是修改mysql密码的时候手抖,导致root权限丢失造成的。解决方案如下:******步关闭mysql服务。在mysql安装目录中,用记事本打开my.ini 在***后一行加入如下代码:skip-grant-tables保存,
2020-08-19 17:16:20
595
1
原创 golang中无法安装第三方包的解决办法
Go 1.13 及以上(推荐)打开你的终端并执行$ go env -w GO111MODULE=on$ go env -w GOPROXY=https://goproxy.cn,direct
2020-08-09 09:39:31
975
原创 redis基本数据结构笔记SDS
1.字符串 SDS摘录自redis深度探险1Redis 中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在的。我们知道 C 语言里面的字符串标准形式是以 NULL 作为结束符,但是在 Redis 里面字符串不是这么表示的。因为要获取 NULL 结尾的字符串的长度使用的是 strlen 标准库函数,这个函数的算法复杂度是 O(n),它需要对字节数组进行遍历扫描,作为单线程的 Redis 表示承受不起。Redis 的字符串叫着「SDS」,也就是 Simple Dynamic String
2020-07-12 16:23:41
120
原创 如何定位占用cpu过高的线程
1.首先根据top命令,发现占用cpu最高的进程PID通过ps aux | grep PID命令,进一步查看当前进程的具体信息。2. 显示当前进程下的所有线程列表ps -mp pid -o THREAD,tid,time找到耗时最高的线程TID,并将其线程ID转换为16进制格式:printf "%x\n" tid3. 打印线程的堆栈信息,thread dumpjstack pid |grep tid -A 30进一步分析堆栈信息,就会定位到问题所在...
2020-07-10 10:11:08
449
原创 微信登录验证流程
微信第三方登录过程用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,或通过app接入微信通过授权,来获取用户基本信息,进而实现业务逻辑。基本步骤为:1、首先我们需要以开发者的身份向第三方登陆平台申请接入应用,申请成功后,我们会获得一个appID和一个secrectID。2、当我们的网站需接入微信登陆时,会引导用户(通过微信logo或其他图示)跳转到微信的登陆授权页面,此时把之前申请的appID带给登陆授权页面。 其实质上是引导用户打开下面的链接:https://open.w
2020-07-10 09:30:05
4565
原创 在java中String类为什么要设计成final?
1.什么是不可变?在java中String类为什么要设计成final?2.string为什么不可变?private final char value[];首先String类是用final关键字修饰,这说明string不可被继承。再看下面,stirng类的主力成员字段value是个char[]数组,而且是用final修饰的,final修饰的字段创建以后不可以改变。虽然value不可变,也只是value这个引用地址不可变。挡不住array数组是可变的事实,array的数据结构看下图。也就是说a
2020-07-09 22:01:21
527
3
转载 中文数字与阿拉伯数字转换
package cn.utstarcom.idpvoice.util; /** * 工具类,用于将汉语的数字转换为阿拉伯数字 * @author utsc1243 * @date 2019年6月12日 */public class ChineseNumToArabicNumUtil { static char[] cnArr = new char [] {'一','二','三','四','五','六','七','八','九'}; static char[] chArr = new char
2020-07-08 14:54:02
426
原创 mysql常见语句语法
检索单个列SELECT prod_name FROM Products;检索多个列SELECT prod_id, prod_name, prod_price FROM Products;检索所有列SELECT * FROM Products;去重SELECT DISTINCT vend_id FROM Products;限制结果个数SELECT prod_name FROM Products LIMIT 5;第一个被检索的行是第0行,而不是第1行。因此,LIMIT 1 OFFS
2020-07-05 10:03:49
103
原创 面试题43. 1~n 整数中 1 出现的次数
class Solution { public int countDigitOne(int n) { int ans = 0; int digit = 1; int high=n/10; int low = 0; int cur=n%10; while(high!=0||cur!=0){ if(cur==0) ans+=digit*high; el...
2020-07-03 17:21:24
1958
原创 多线程面试手撕题
按序打印我们提供了一个类:public class Foo {public void one() { print(“one”); }public void two() { print(“two”); }public void three() { print(“three”); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 one() 方法线程 B 将会调用 two() 方法线程 C 将会调用 three() 方法请设计修改程序,以确保 two() 方法在 one.
2020-07-02 22:19:36
556
原创 二叉树公共祖先问题
1.如果是二叉搜索树的最近公共祖先问题剑指 Offer 68 - I. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4
2020-07-02 14:06:41
375
原创 二叉树前中后序遍历的迭代版本
前序public static void preOrderIteration(TreeNode head) { if (head == null) { return; } Stack<TreeNode> stack = new Stack<>(); stack.push(head); while (!stack.isEmpty()) { TreeNode node = stack.pop(); System.out.print(node.value + " "
2020-07-02 11:55:28
205
原创 byte dance
K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5/** * Definition for singly-li.
2020-07-01 19:46:47
1460
原创 JVM性能监控与故障处理工具
jps(JVM Process Status Tool):虚拟机进程状况工具功能与ps命令类似,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一id在bin路径下输入: jps -l 可以输出主类的全名jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具用于监视虚拟机各种运行状态信息的命令行工具。可以显示本地或者远程悉尼及进程的类装载、内存、垃圾收集、JIT编译等运行数据jinfo:(Configuration I
2020-06-30 11:13:34
99
原创 二分查找法总结
二分查找不简单,Knuth 大佬(发明 KMP 算法的那位)都说二分查找:思路很简单,细节是魔鬼。很多人喜欢拿整型溢出的 bug 说事儿,但是二分查找真正的坑根本就不是那个细节问题,而是在于到底要给mid加一还是减一,while 里到底用<=还是<。二分查找框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = left +
2020-06-30 09:01:25
169
原创 leetcode股票题解
每天都有三种「选择」:买入、卖出、无操作,我们用 buy, sell, rest 表示这三种选择。但问题是,并不是每天都可以任意选择这三种选择的,因为 sell 必须在 buy 之后,buy 必须在 sell 之后。那么 rest 操作还应该分两种状态,一种是 buy 之后的 rest(持有了股票),一种是 sell 之后的 rest(没有持有股票)。而且别忘了,我们还有交易次数 k 的限制,就是说你 buy 还只能在 k > 0 的前提下操作。这个问题的「状态」有三个,第一个是天数,第二个是当前为
2020-06-29 16:11:42
283
原创 886. 可能的二分法
给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。当可以用这种方法将每个人分进两组时,返回 true;否则返回 false。示例 1:输入:N = 4, dislikes = [[1,2],[1,3],[2,4]]输出:true解释:group1 [1,4], group2 [2,3]思路:将一组染色(
2020-06-28 22:05:56
130
原创 单词拆分
最简单的实现方法是用递归和回溯。为了找到解,我们可以检查字典单词中每一个单词的可能前缀,如果在字典中出现过,那么去掉这个前缀后剩余部分回归调用。同时,如果某次函数调用中发现整个字符串都已经被拆分且在字典中出现过了,函数就返回 true 。public class Solution { public boolean wordBreak(String s, List<String> wordDict) { return word_Break(s, new HashSet(w
2020-06-20 10:34:29
215
原创 背包问题
01背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。import java.util.Scanner;public class Main
2020-06-10 21:53:50
290
原创 mybatisplus代码生成器
public class getCode { @Test public void main1() { // 1、创建代码生成器 AutoGenerator mpg = new AutoGenerator(); // 2、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir");
2020-06-03 22:32:01
139
原创 mybatis-plus入门篇
mybatisplus特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、
2020-06-03 22:24:39
169
原创 mysql远程链接记录
登入mysqlmysql -uroot -p进入mysql数据库use mysql;开启远程访问权限:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'强制刷新权限:flush privileges;关闭mysql:exit;开启防火墙:查看已经开放的端口:firewall-cmd --list-ports开放端口firewall-cmd --zone=public --add-port=8
2020-06-01 23:30:03
287
原创 docker基础命令镜像篇
docker [image] pull NAME [ :TAG]其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本信息) 。 通常情况下, 描述 一 个镜像需要包括名称+标签信息。获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令:$ docker pull ubuntu: 18. 04对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择la迳釭标签,这会下载仓库中最新版本的镜像。下载镜像到本地后, 即可随时使用该镜像了,
2020-05-19 16:33:57
287
原创 Docker核心概念
Docker 大部分的操作都围绕着它的三大核心概念 : 镜像、容器和仓库。因 此 ,准确把握这三大核心概念对于掌握 Docker 技术尤为重要 。镜像Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板 。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或用户需要的其他软件) 。 可以把它称为一个 Apache 镜像 。镜像是创建 Docker 容器的基础 。通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有
2020-05-19 13:49:53
132
原创 Docker的安装与卸载
安装基本软件$ sudo apt-get update$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -yapt仓库添加并阿里云的docker软件包, 把下载的key添加到本地trusted数据库中。$ sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sud
2020-05-16 20:24:41
114
原创 springcloud组件使用
服务发现——Netflix Eureka客服端负载均衡——Netflix Ribbon断路器——Netflix Hystrix服务网关——Netflix Zuul分布式配置——Spring Cloud Config1. 服务发现——Netflix Eureka创建工程cloud-eureka-server7001pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache..
2020-05-13 19:17:54
157
原创 LEETCODE DFS中等篇
1从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7思路:因为前序遍历为根左右。 中序遍历为左根右。所以前序遍历的第一个元素为重建的二叉树的根节点的值。遍历中序遍历,直到找到和根节点值相同的位置。则此元素左边的都是根节点的左子树的元素,右边
2020-05-11 17:40:01
95
原创 GIT高级篇
git:分布式版本控制系统https://git-scm.com/git : [g i: t]Linux系统 -> BitKeepper(2005收费)Linux系统 ->Git版本控制系统:集中式版本控制(cvs svn) 分布式版本控制(git)git优势:本地版本控制 重写提交说明 可以“后悔” 分支系统svn:a.txt “这是我的文件”git a.txt “这是我的文件” -》a.txt “这是我的第一个文件”svn:增量git:全量(每一个版
2020-05-09 14:47:32
328
原创 LEETCODE DFS基础篇(已完成)
1相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1/ 2 2 [1,2], [1,null,2]输出: false示例 3
2020-05-09 14:40:06
125
原创 代理模式
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式–代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。一、代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单的说就是,我们在访问实际对象
2020-05-08 21:34:24
94
原创 LEETCODE每日打卡篇 5-8
221. 最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4思路:`if (grid(i, j) == 1) { dp(i, j) = min(dp(i-1, j), dp(i, j-1), dp(i-1, j-1)) + 1;}...
2020-05-08 12:05:57
134
原创 LEETCODE动态规划中等篇
1523. 连续的子数组和给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。示例 1:输入: [23,2,4,6,7], k = 6输出: True解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。示例 2:输入: [23,2,6,4,7], k = ...
2020-05-08 11:51:46
180
1
原创 GIT基础使用
SVN冲突:避免冲突, 及时提交、更新git:版本控制软件分布式版本控制软件命令:git add:将本地文件 增加到暂存区git commit:将暂存区的内容 提交到 本地仓库(本地分支,默认master分支)git push:将本地仓库的内容 推送到 远程仓库(远程分支)git pull:将远程仓库(远程分支)的内容 拉取到 本地仓库(本地分支)安装gitmsysgit.g...
2020-05-06 13:18:14
128
原创 LINUX下配置zookeeper遇到的问题
下载到官网去下载你想要的版本 官网下载地址解压:tar -zxvf zookeeper-3.4.10.tar.gz[root@localhost tmp]# cp zookeeper-3.4.10 /usr/local/zookeeper -r //复制所有文件到zookeeper 文件夹下[root@localhost tmp]# cd /usr/local/zookeeper ...
2020-04-30 22:38:27
289
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人