- 博客(173)
- 资源 (6)
- 收藏
- 关注
原创 面试题总结
1.请谈谈对volatile的理解volatile是java虚拟机提供的一种轻量级的同步机制,基本遵守了JMM规范,保证多线程可见性、有序性(禁止指令重排序),不保证原子性;synchronized全都可以保证。JMM(Java Memerory Mode):java内存模型,描述的是一种多线程下访问共享内存的规范。对同步的规定:线程加锁前,必须读取主内存一份最新的值到自己的工作内...
2019-11-16 15:33:20 374
原创 加密算法
一、解决什么问题用明文的方式在网络上通信是不安全的,容易被别人偷窥,不安全。如果消息加密之后再传输那么安全系数肯定比明文要高得多。二、加密算法1、单向加密原理:用公开的算法对数据单向加密,不能解密,用于验证数据完整性常见算法:MD5、SHA1、HMAC2、对称加密算法原理:密钥是保密的,只有通信双方知道,加密解密使用同一个密钥,加密解密算法是公开的,这样生成的密文别人是...
2019-08-21 10:28:40 607
原创 [WebRTC 02]如何使用浏览器给自己拍照
一、基础概念1.音视频播放器播放原理按照一定的时间间隔连续地播放从音视频文件中解码后的视频帧,每个视频帧直接的时间间隔非常小,小到人眼无法分辨,视觉上将一帧帧连起来就变成了动画。2.帧的分类1)非编码帧:非编码帧(没有被编码或者被解码后的帧),从摄像头获取的本身就是非编码帧,每一帧就是一幅独立的图像。格式一般是YUV、RGB。2)编码帧:经过编码器(H264/H265、VP8/...
2019-07-27 20:50:27 535
原创 [WebRTC 01]通过浏览器访问摄像头
一、前言音视频技术发展到今天,已经是比较成熟了,H264/H、VP8/VP9、以及AV1编解码器,解决了,音视频压缩率的问题;而5G技术的商用,解决了带宽问题。2011年Google推出WebRTC技术后,又大大降低了音视频技术的门槛。有了WebRTC开发人员不需要自己去实现回音消除、编解码器,更不用考虑跨平台的问题了。WebRTC可以在浏览器上快速开发出音视频应用,随着WebRTC1.0规范...
2019-07-27 03:31:52 1540 1
原创 Linux命令和JDK自带工具分析服务器性能
一、性能指标随着应用负载的增加,系统资源的使用也会升高,甚至达到极限,而性能问题的本质,就是系统资源已经达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求。性能分析就是找出应用或者系统的瓶颈,并设法避免或者缓解,从而更高效的利用系统资源处理更多的请求。一般通过六个步骤:选择指标评估应用程序和系统的性能; 为应用程序和系统设置性能目标; 进行系统基准测试; 性能分析定位瓶颈; ...
2019-07-26 02:29:10 550
原创 Redisson分布式锁实现
一、锁的实现原理在一些场景中,我们希望一个方法同一时间只被一个线程执行,如果在单机环境下我们可以通过使用Java提供的并发API来限制访问,同一个JVM的线程可以通过共享堆内存中的变量来标记,这个标记其实就是锁,synchronized是通过对象头来标记;Lock接口的实现类是通过一个volatile的int型变量state来实现多线程的可见性和有序性(防止指令被重排序);linux 内核中也...
2019-07-20 16:19:59 927
原创 mysql索引
一、什么是索引索引是一种加快检索(降低io成本)和排序(降低CPU消耗)的数据结构。本身就是一个文件,mysql的data目录下有三种格式的文件xx.frm(表结构文件)、xx.MYD(数据文件)、xx.MYI(索引文件)。二、什么情况下应该建索引1.where条件中频繁出现的字段应该建立索引2.主键自动建立索引3.查询中与其他表关联的字段,外键关联建立索引4.查询中统计或...
2019-07-20 03:21:25 181
原创 [LeetCode788] Rotated Digits 旋转数字
一、题目我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。如果一个数的每位数字被旋转以后仍然还是一个数字,则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。现在我们有一个正整数N,...
2019-05-12 18:01:14 277
原创 [LeetCode617] Merge Two Binary Trees 合并二叉树
一、题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入: Tree 1 Tree 2 ...
2019-05-12 16:05:14 213
原创 [LeetCode19] Remove Nth Node From End of List 删除链表的倒数第N个节点
一、题目给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?二、思路使用快慢指针实现,一个快指针fast先走...
2019-05-12 01:43:15 204
原创 [LeetCode7] Reverse Integer 整数反转
一、题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返...
2019-05-12 00:00:18 233
原创 redis一致性hash实践
之前在网上看过一致性hash原理,但是看过就忘记了,根本原因是没有理解透彻也没有实践,最近我负责了公司的会员业务,redis是开发自己搭建的,没有被DBA管理,最近要求迁移,这个工作就落在了我头上,为了确保迁移后缓存的key还能路由到原来的数据上,我把架构和源码研究了一番,发现竟然用了一致性hash,顿时眼前一亮,毕竟之前的系统没有这么用过,简单的就是主从+Sentinel,稍微复杂点用集群将数据...
2019-04-24 04:08:00 1515 2
原创 go学习笔记4-go协程间的协作
通过channel实现go协程间的协作,类似于java的wait和notify。协程1执行到i 等于10因为管道没数据被阻塞,协程2执行完写入数据到channel,协程1被唤醒继续执行。一、代码package mainimport "fmt"import "time"func main() { ch := make(chan int) go func() { for ...
2019-04-20 23:10:40 319
原创 go学习笔记3-协程和线程对比
在B站上看了一个视频,讲了协程和线程在运行机制上有一些不同,线程运行中会因为操作系统的调度而失去时间片,协程运行过程中是不会受到影响的,除非协程的业务代码主动让出CPU执行权或者遇到io阻塞,接下来用线程和协程实现同样功能来对比一下两者之间的区别,线程的代码我用java写,但是运行结果出乎我的意料,恰恰相反,多线程版本的执行完一个线程再执行下一个,而多个协程是交错执行的,我是见了鬼吗?一.ja...
2019-04-20 22:55:23 621 1
原创 go学习笔记2
1.结构体、接口初体验package mainimport "fmt"type Animal interface { eat() run()}type Cat struct { Name string Age int Color string}func (cat Cat) eat() { fmt.Printf("a cat is eating,it's ...
2019-04-20 21:49:29 212
原创 [LeetCode14] Longest Common Prefix 最长公共前缀
一、题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。二、思路题目还算简单,...
2019-04-20 16:38:00 200
原创 [LeetCode02] Add Two Numbers 两数相加
一、题目给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&g...
2019-04-20 15:40:51 212
原创 go学习笔记1
学习了几天go语言,谈一下感想吧,自动格式化代码(统一代码格式)、支持多返回值、导入包和定义变量必须使用、切片、协程等,感觉是结合了各种语言的优点,当然也有我觉得不太爽的,就是结构体的属性和方法不在同一个花括号定义,这样没有java那样清晰,interface的方法就是在一个花括号里边的,为啥就不能放一起呢,如果我的一些子类既有共同属性和方法,那么我就要定义一个结构体保存通用属性,作为子类们的一个...
2019-04-17 22:14:39 176
原创 [LeetCode01] Two Sum 两数之和
一、题目给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...
2019-04-14 18:53:51 211
原创 中缀表达式计算器
一、实现思路1.双栈,一个操作符栈,一个操作数栈,从左到右扫描所有的字符2.如果是操作数,直接入操作数栈;如果是操作符,比较栈顶操作符和新操作符优先级 如果新的操作符是左括号或优先级高于栈顶元素时新的操作符入栈; 如果新的操作符优先级不高于栈顶元素的 ,就先出栈一个操作符(如果新操作符是右括号要循环弹出操符直到碰到左括号结 束和两个操...
2019-04-14 17:03:33 923
原创 Problem one: Trains
分享一道TW的笔试题吧,该题目考查的是图的存储、深度优先遍历、最短路径等知识点。图共有两种存储方式,第一种是邻接矩阵(二维数组),另外一种是邻接表(map+链表),我采用的是邻接表的一种变种表示法,将链表用map替代了,为了方便通过顶点的值查找到另一个顶点的路径。该题共有10个测试用例,目前只有9个测试用例是通过的,第10道题我目前还没有找到解决方案,前5道题都是用同一种方式来遍历的,用前...
2019-03-31 22:29:34 742
原创 org.apache.commons.httpclient.util.DateUtil.formatDate时间少一天
一、一个奇葩Bug前几天测试测出来一个Bug,设置生日然后保存成功,会自动往前一天,比如设置为1990-01-01,再回去看,会变成1989-12-31,因为优先级较低,其他同事也没遇到过这种奇葩问题而且当时比较忙,然后Leader让我有时间查一下,然后我今天查了一下,写了一个测试用例测了一下,发现是因为使用org.apache.commons.httpclient.util.DateUtil...
2019-03-28 18:28:09 2357
原创 Netty介绍以及源码分析
一. Netty是什么Netty是一个能支持快速和容易开发网络应用程序的NIO客户端服务器框架,例如协议服务器客户端,它极大的简化了网络编程,例如TCP和UDP套接字编程。快速和容易并不意味着应用程序将面临维护和性能问题。Netty是在积累了大量协议(例如FTP、SMTP、HTTP、还有各种二进制和基于文本的遗留协议)的经验前提下被精心设计的。因此,Netty成功地找到了一种方式,在不...
2019-03-28 07:11:03 268
原创 Scalable IO in Java(Java可伸缩IO)
翻译一下Doug Lea所写的Scalable IO in Java(Java可伸缩IO)大多数的网络服务有着同样的处理流程:Read request 请求数据读取 Decode request 请求数据解码 Process service 业务处理 Encode reply 响应编码 Send reply 响应发送但是每一步的本质和代价是不一样的。经典的服务...
2019-03-28 05:06:19 871 1
原创 mysql使用INSERT INTO ON DUPLICATE KEY UPDATE导致dead lock分析和解决
一.事件回放2019年1月的几天时间里每天会收到1次或者2次死锁的短信告警,死锁日志如下图。二、检查业务场景和程序处理流程用户打赏礼物请求处理,涉及到用户余额表和佣金账户表,以下所有操作在一个事务里,事务的隔离级别是read-commited,前一个操作执行成功才会继续下一个步骤否则抛出异常回滚事务:1.扣除用户余额账户金额2.增加陪玩佣金账户金额3.增加公会佣金账户金...
2019-03-16 18:11:58 4410
原创 机器学习实战笔记1
机器学习的主要任务是分类,我们决定使用某个机器学习算法进行分类,首先要做的是算法训练,即学习如何分类,通常我们为算法输入大量的已分类数据作为算法的训练集,训练集是用于训练机器学习算法的数据样本集合,目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是标称型的,而在回归算法中通常是连续型的。训练样本必须确切的目标变量的值,以使机器机器学习可以发现特征与目标变量之间的关系。为了测试机器学...
2019-03-12 01:30:24 168
原创 mac系统docker入门
一、安装mac系统不能像Linux系统安装docker那样一条命令完成,需要安装docker公司开发的软件,提供了一个虚拟化的环境来运行docker,安装完成之后1个多G。1.首先确认系统版本,docker要求2010年以后的系统,10.12的操作系统可以安装Docker Desktop for Mac。老版的系统可以安装docker-Toolbox。2.不能安装4.3.30以前版本的...
2019-03-03 11:56:59 487
转载 Paxos算法介绍
Paxos分析最近研究paxos算法,看了许多相关的文章,概念还是很模糊,觉得还是没有掌握paxos算法的精髓,所以花了3天时间分析了libpaxos3的所有代码,此代码可以从https://bitbucket.org/sciascid/libpaxos 下载。对paxos算法有初步了解之后,再看此文的效果会更好;如果你也想分析libpaxos3的话,此文应该会对你有不小帮助;关于paxo
2017-03-05 22:01:54 594
转载 Github上更新自己Fork的代码
Github上更新自己Fork的代码一、前提本文的前提是你已经在github上fork了别人的分支,并且弄好了跟github的ssh连接。相关配置详情参考:https://help.github.com二、详细操作检出自己在github上fork别人的分支到AndroidDigestDev目录下,其中AndroidDigestDev目录之前是不存在的。git c
2017-02-27 16:53:11 776
转载 github上fork别人的代码之后,如何保持和原作者同步的更新
github上fork别人的代码之后,如何保持和原作者同步的更新回想一下,我更新代码之后提交给作者是通过Pull Requert,如果我反向操作一下Pull Request可不可以把原作者的代码合并到自己的Github仓库中呢。我试了一下,居然可以诶,完全接触不到任何命令。保持和原作者同步的更新的方法1、进入你的Github发起Pull Request2、选择Compa
2017-02-21 15:20:51 3769 2
转载 一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)
单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份集群部署(cluster):有多个饮水机同时提供服务,服务冗余部署,每个冗余的服务都对外提供服务,一个服务挂掉时依然可用热备部署(hot-swap):只有一个桶提供服务,另一个桶stand-by,在水用完时自动热替换,服务冗余部署,只有一个主服务对外提供服务,影子服务在主服务挂掉时顶上磁盘
2016-12-30 21:31:58 693
原创 eclipse自动退出解决方法
问题签名:问题事件名称: APPCRASH应用程序名: javaw.exe应用程序版本: 7.0.170.2应用程序时间戳: 513094ef故障模块名称: OverlayIcon64.dll故障模块版本: 1.0.0.1故障模块时间戳: 5652c50a异常代码: c0000005异常偏移: 0000000000008b3eOS 版本: 6.1.7601.
2016-12-27 18:09:26 1734
转载 如何查看特定端口是否被占用?
如何查看特定端口是否被占用?1:开始--运行--cmd2:输入:netstat -aon|findstr "8080"3:回车4:得到如下内容:TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 24485:看到了吗,端口被进程号为2448的进程
2016-12-27 17:59:11 502
nodejs win7-64位软件
2015-10-12
require.js
2015-03-10
Trac-1.0.1.zip
2014-07-21
TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi
2014-07-21
slf4j-1.6.2
2014-07-21
ch341ser.zip
2014-01-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人