自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Vant的博客

用最简洁的语言表述问题的本质。https://github.com/Vant1032

  • 博客(58)
  • 问答 (1)
  • 收藏
  • 关注

原创 开发者应如何用免费抢占市场?

看似免费不划算,其实对于运营成本低廉的服务来说,免费获得了很多,尤其是saas这种研发好了,更多用户带来的不过是添加机器的钱,这点钱相比获得这么多用户的营销成本往往更少,所以saas流行基础服务免费。当下AI领域的竞争就是如此,ChatGPT提供3.5版本的免费模型,那么其它厂商如果做得没有3.5版本好用,它基本上就没法赚钱,后来的竞争者就得掂量下自己能不能达到这个水平。从社会的角度考虑,免费有利于促进共同富裕,让更多人体验到社会进步,有钱的出钱,没钱的捧个场。

2024-01-21 20:17:58 382

原创 中国互联网还有哪些短板需要补齐?

在互联网领域,中美实力都很强大,那么中国相比美国到底差距在哪里?回顾历史,我们可以发现,中国互联网起步在2000年左右,而美国在此之前已经发展了20年,正是这20年,让美国占据了先发优势。那么,美国有哪些先发优势呢?

2024-01-16 19:57:41 395

原创 程序员如何具备跨行业视角

例如,当下正是ChatGPT火爆的时候,我看到很多基于ChatGPT的产品,有的做成网站,有的做成小程序,有的做成APP。我记得2月份的时候有个叫Nova的APP,在谷歌商店全球排名前50,其就是ChatGPT套了一个壳,只可以免费使用三次,然后就要付费20美元一个月,这个软件月入百万美元是没问题的,甚至可能月入千万美元,其成功并不来自于技术有多么难,技术在其中占比并不高,主要来自于庞大的市场需求,这个市场缺乏竞争对手,可以猜测它应该用了一些推广手段,比如付费打广告让自己排名靠前。如何获得更多的行业视野?

2024-01-14 19:40:27 383

原创 如何使用loki查询日志中大于某一数字的值的日志

loki是一款轻量级的日志收集中间件,比elk体系占用的内存更小,采用go语言开发,可以利用grafana来查询loki中存储的日志,loki存储日志只对提前预设的标签做索引,所以日志存储空间占用比elk小很多。

2024-01-05 18:25:37 437

原创 如何使用graalvm为带有反射功能的java代码生成native image

graalvm让native镜像支持反射的关键是利用json提前告诉它哪些类的哪些方法会被反射调用,然后它就能力在运行时支持反射了。

2024-01-04 01:15:01 1025

原创 如何使用ffmpeg转换图片格式

windows安装ffmpeg,从如下网站下载release版本 https://www.gyan.dev/ffmpeg/builds/ffmpeg 6.1版本仍然不支持heic的图片格式,未来可能会支持,具体见该issue: https://trac.ffmpeg.org/ticket/6521图片格式压缩率:jpeg < webp < heif < avif图片压缩率比较高的还有个jxl格式,但是太新了而且各个平台支持都不到位,只能战未来了。

2023-11-28 16:55:38 967

原创 做了个 chrome 插件实现 B 站视频截图功能,直接从当前视频帧无损复制

对于用 1080p 、2k 显示器的人,看 4k 视频截屏无法截出 4k 的分辨率,受到了显示器分辨率限制,而使用我的插件就可以完美截取视频原始的分辨率的图片,画质党福音。完成后又稍作改进,把这段代码转成 chrome 插件,可以通过右键来下载视频帧,也可以用快捷键下载。起因是看 B 站视频想截个图很麻烦,右下角暂停按钮无法去除,于是写了一行代码把暂停按钮隐藏。后经提醒,发现可以通过 canvas 获取视频帧来截取图片,于是写了如下代码完美获取视频帧。

2023-10-10 12:23:30 587

原创 我反对独立开发者做笔记产品:从商业角度看笔记产品市场竞争

于是,flomo这个产品就符合这个特征,利用记录灵感为切入点以及大公司云笔记产品过于臃肿的弊端,巧妙切入记录灵感、轻记录、速记的领域,但是即使这样,印象笔记、有道云笔记依然把这个功能抄过去了,所幸flomo功能极致简单,因此产品研发成本、运营成本很低,还可以好好活下去。总结:我反对独立开发者做笔记产品是因为赚不到钱,独立开发者是要赚钱的,不赚钱,那你只能说是开源贡献者,不要混淆独立开发者和开源贡献者的概念,两者是完全不同的。除非你跨维度打击,我开发笔记app我就不想挣钱了,我就是玩,我直接开源!

2023-08-20 18:59:42 144

原创 技术达到瓶颈的程序员应去了解各个行业的产业链

程序员的优势是不需要像制造业那样有实物成本,基本上就是一个把想法变成现实的工种,要想赚到更多钱就得去掌握更多信息,那些有价值的信息往往隐藏在各个产业链之中,这么多产业链程序员必然可以寻得一个细分领域来赚钱。了解这些的重点是什么:重点是整个产业从上游到下游有哪些类型的公司,他们有哪些需求,有哪些需求是程序员可以去满足的。我觉得程序员在入行3到5年后,技术上站稳了,就应该尝试去了解行业知识,了解各类产业的产业链是怎么样的,具体做法是:关注各个行业的权威垂直媒体,不要关注大而泛的媒体。

2023-06-14 22:01:26 105

原创 程序员如何在工作之外赚钱

代码写好后,一定要设计好变现方式,然后去做推广,有了足够用户后就能转化一部分付费用户,于是你有动力把产品做得更好,与此同时做用户增长相关的运营,例如用户推广给好友给点积分之类的好处,用户越多,付费越多,就有更多钱去做推广,整个产品就进入了正循环。如今时代,如果经商,其实程序员应该好好想想自己的技术能解决多少人的需求,有一个细分领域的人群认可你的产品,你就可以在工作之外写代码来服务那部分人赚钱,但是一定要设计好变现策略,哪些功能可以免费使用,哪些是要付费,定价怎么搞,如何推广?如何进行病毒式营销-裂变?

2023-06-14 21:54:58 71

原创 处理MQ消息幂等性的解决方案

场景:消息可能会被重复消费,要保证其幂等性方案一:消息生产者投递消息时每个消息都包含一个全局唯一ID来标识每条消息,建立一张消息日志表,记录消息的id和执行状态,在消息id上加唯一索引。消费的时候,先往消息日志表插入记录,如果插入失败报错duplicate key,那说明消息已经消费过,就不用再消费了,这就保证了幂等性。这个方案的关键点在于你要保证消息的id是全局唯一,这就涉及到各种技术方案了,比如snowflake、UUID等。...

2022-03-03 18:15:25 2529

原创 高质量的快乐与低质量的快乐

有些人的价值观是追求幸福,进而觉得要过得快乐,于是追求快乐就等于在追求幸福,可是这里有个坑点需要注意:快乐是有质量之分。有些事情做起来很快乐,却也让你虚度光阴、碌碌无为、精力衰退、健康受损、空虚、迷茫、被情绪左右等;有些快乐让你事业有成、健康生活、更加积极、提升了自我、解决了难题等。如果无视快乐的质量,那么吸毒显然是最让你快乐的。我想古人追求诗书琴棋画带来的快乐是很有道理的,因为这些在给你带来快乐的同时往往会改善你的生活,让你变得更好。前段时间传遍全网的北大学霸韦东奕:从数学中找到了快乐,从数学中找到了

2021-10-12 23:59:11 192

原创 教训与启示--编程规范:多表关联时一定要加上表名限定

selecttypefrom Ainner join B on A.id = B.id来,看下这个sql是否有啥问题?在什么情况下会导致这条sql执行报错?这个sql的问题在于:一旦A和B都有type这个字段,那么就会执行报错。如果由于表结构的改变导致A和B都有type字段,那么就会出现问题。因此,多表关联一定要加上表名限定,否则就会有重名风险。改好后的例子如下,这样就可以很好应对表结构的变化:selectB.typefrom Ainner join B on A.id = B.id

2021-09-16 10:52:03 346

原创 Bat语法快速入门

常用指令书写bat文件,想要双击bat后窗口继续保留,可在末尾加上:cmd /kcmd /k 是执行完dir命令后不关闭命令窗口调用外部bat文件:call b.bat执行结束暂停pause: 代表批处理标签引导符,用于goto到特定标签START 启动另一个窗口来运行指定的程序或命令。start a.bat指定工作目录执行start cmd /k "d: && dir"call cmd /k "d: && dir"变量设置全局变量(不要在名

2020-11-13 22:44:49 1084

原创 如何更快的查找线上系统问题--多次重大线上事故复盘

以前我以为,线上系统的问题,只需要好好检查代码即可找出原因,可是工作后发现,现实并非如此,往往线上系统的问题来源于信息不对称。这种信息不对称体现在团队成员之间没有好好沟通,了解彼此对系统的改动,以及跨部门、跨系统、跨平台之间的信息不对称。其实,当线上问题来临时,心态很重要。新人往往在系统出故障时(尤其是故障是自己负责的部分)感到很慌张,我一开始也是如何,但后来渐渐看开了。程序员进行代码开发总是会出现bug的,慌张对于解决系统故障并无好处,反而容易因为慌张而导致忽略了必要的流程,从而导致修复故障过程出错。除

2020-09-30 00:30:52 1117

原创 源码分析Jedis配置的TestOnBorrow实现原理及对应的lettuce配置

概述Jedis的设置项中有一个testOnBorrow的配置项,这个配置项其实来自于Apache CommonPools,意思是从连接池中取出是检查连接是否失活。最近需要把项目中的Redis客户端从Jedis切换成Lettuce,发现Lettuce中没有testOnBorrow的这个配置项,倒是有一个pingBeforeActivateConnection配置项(官方说法是在使用连接前,先进行PING检查连接),本着迁移时不对项目现有配置做改动的原则,研究下Jedis的testOnBorrow配置项的底

2020-06-18 19:36:14 2698

原创 一文搞懂Java8中表示当前的时间类Date、Instant、LocalDateTime、ZonedDateTime

1. 概述Java8中的时间类主要有:Date、Instant、LocalDateTime(LocalDate、LocalTime)、ZonedDateTime,除去Date,java.time包下的那些时间类都是不可变类,也就是说:其是线程安全的,对其设置只会产生一个新对象。在这里,我们要分清楚包含时区信息的类、以及不包含时区信息的类。不包含时区信息的类实际上就类似于一个yyyy-MM-dd HH:mm:ss字符串,需要额外的时区信息才能表达一个时刻,即LocalDateTime、LocalDate、

2020-05-20 23:47:10 2046

原创 解决JRebel进行代码热加载时FastJson的JsonField的缓存无法刷新问题

问题原因FastJson为了快速解析对象,会将已经解析过的对象的元信息缓存起来,所以关键就是清除其缓存,在没有缓存的情况下其会再次生成。相关Issue:jrebel修改后调用toString方法报错问题问题:修改属性的类型后无法解析。解决方案@RestController@RequestMapping("/api")public class SystemController {...

2020-04-18 22:09:00 726 3

原创 记录下自己编译Spring5源码的过程(一)之处理依赖问题

缘起这段时间一直接触Spring,我这人就喜欢没事看看源码,捣鼓捣鼓写东西,于是就想着研究下Spring的源码,于是到Github下载了Spring5的源码,尝试着编译,不过总是碰到些问题。比如:Gradle同步是老师报PKIX异常(ssl证书问题),或是某些东西无法下载,花了好久、躺了许多坑,最终在我给老爸打电话时点击同步等了许久它突然就好了,神奇。踩坑一开始我下了源码直接就Gradle同...

2020-04-06 23:34:47 362

原创 《Redis深度历险》读书笔记

文章目录1. Redis 的用途2. 字符串的实现3. 列表list3.1. quicklist4. 字典hash4.1. rehash5. 对象的过期时间6. 应用:分布式锁7. 应用:限流(zset,漏斗限流)8. 使用标准结构存储的阈值9. Redis分布式与CAP定理10. Sentinel11. 集群11.1. Codis11.2. Redis-Cluster的实现12. Info详解1...

2019-10-08 10:38:39 360

原创 《Redis设计与实现》读书笔记

文章目录1. 基本对象2. 底层数据结构3. 对象3.1. 字符串对象3.1.1. int3.1.2. embstr3.1.3. raw3.2. 列表对象3.3. 哈希对象3.4. 集合对象3.5. 有序集合对象3.6. 对象共享4. SDS (simple dynamic string)5. linkedlist6. hashtable7. intset7.1. 升级8. 压缩列表(ziplis...

2019-10-07 12:45:52 220

原创 https的连接过程及数字证书详解

文章目录1. 概述2. 数据证书3. 连接过程3.1. 过程概括3.2. 具体过程4. 参考资料4.1. 推荐资料1. 概述https是http+SSL(TLS)的结合体,SSL(现在升级为TLS了)是一种独立的协议,可以与其它协议结合在一起。https采用了非对称加密+对称加密结合的方式来工作,因为非对称加密速度慢,所以先利用非对称加密来传输对称加密的密钥,然后再使用对称加密的方式传输。在s...

2019-09-02 19:01:57 875

原创 openjdk11源码从编译到clion调试

1. 概述先声明环境:Ubuntu18安装并配置好JDK11(openjdk version “11.0.1” 2018-10-16)Clion2019.2可以在docker里面编译,利用ubuntu的镜像,然后安装相关依赖也不会影响到宿主机。2. 下载OpenJDK11其实我们搜索openjdk进入到jdk11特性列表页面时,左边有个Mercurial链接,从那就可以进入源码列...

2019-08-30 14:56:59 6218 6

原创 全排列算法本质与实现

本质解决全排列问题本质是:二分法。将某个数组的全排列看成是由第0个元素与其后所有元素的全排列组成。做法是每次只需要挑选某个元素作为当前排列的第0个元素,然后剩下的变成子问题递归来解决。原理设一个数组的长度为n,则其全排列的个数为n!个。设f(n)代表对于一个n长度数组的全排列,array(n)代表数组中的第n个元素,+代表拼接。f(n) = array(1 to n) + f(n -...

2019-08-25 16:35:16 180

原创 剑指offer-二维数组查找题解-本质与实现

概述从左下开始找。本质是利用:有序序列中最小的元素比target(目标元素)大,那么target必然不在此序列中。因此也可以从右上找。题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。原理从左下开始找。左下的那个元素m有如下性质:这一...

2019-08-24 15:35:25 141

原创 剑指offer-重建二叉树-Java版题解

概述本题来自牛客网-剑指offer在线测评原理与实现思想:二分、递归关键是:利用前序序列根节点在前找到根节点,用根节点去中序序列划分成两部分,左部分是左子树,右部分是右子树。再利用子树长度去前序序列把前序序列中的左右子树找出来,同时可以找出根节点。递归进行此步骤,如果子树长度为0,则不需要生成子问题。class TreeNode { int val; TreeNode l...

2019-08-23 09:53:17 165

原创 如何打乱一个数组--数组shuffle实现及常见错误

定义打乱:对于一个数,它随机跟其它位置或其本身位置交换定义一个数组的打乱:数组中每一个数都被打乱成为数组的打乱import java.util.Random;/** * 参考自Java Collection源码 * 定义打乱:对于一个数,它随机跟其它位置或其本身位置交换 * 定义一个数组的打乱:数组中每一个数都被打乱成为数组的打乱 */class Shuffle { pu...

2019-08-22 19:29:31 812

原创 快速排序的原理及其实现(C++及Java版)浅析

快速排序原理基于二分的思想,先随机选定一个基准数(比如最左边的),然后从一个指针从最右边找比基准数小的数,一个指针从最左边找比基准数大的数,然后两数交换位置,重复找并交换的过程,最终在两个指正相碰时,该位置就是基准数在最终排好序时的结果,将基准数和该位置上的数交换位置,即可。然后根据基准数的位置二分,在两边依次使用快速排序。终止条件:划分到只有1或0个元素时即可终止。为什么该位置是基准数在最...

2019-08-20 14:46:45 118

原创 Java通过注解实现一个接口--利用反射与代理

概述传统实现接口的方式需要implement才行,通过注解实现一个接口可以减轻每次都要implement的繁琐。本文实现一个Demo来展示如何通过注解实现一个接口。Codeimport java.lang.annotation.Annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Re...

2019-07-21 16:43:32 1237

原创 wireshark过滤器语法全面解析

本文全面介绍了wireshark过滤器语法,wireshark包括捕获过滤器和显示过滤器,其中显示过滤器的语法十分丰富,其实显示过滤器的语法可以简单概括为:基本数据类型,协议对象,比较运算符,结合运算符,字符串函数与正则表达式,这就是其所有语法。其中高级的用法也许是切片、集合、正则表达式。本文重点在于全面的描述其基本语法,通过例子来学习,那些复杂的用法其实都来自这些基本的语法元素

2019-07-21 09:51:24 1463

原创 层序遍历时划分每层-Leetcode 429. N叉树的层序遍历-java版

如何在层序遍历n叉树时,将每层元素分开?本文通过广度优先搜索(BFS)的方式解决这个问题。其实DFS也是可以的。

2019-07-16 19:27:35 355

原创 全面介绍Linux下tcpdump的使用

本文将全面地介绍tcpdump的选项及其表达式的具体用法,并给出常见用法及推荐资料。tcpdump是Linux上的网络抓包工具,可以监视所有经过网卡的流量包。tcpdump的命令格式为`tcpdump options expression`,通过表达式可以过滤流量。直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

2019-07-15 15:33:50 1014 2

原创 shell编程入门详解--从基础到调试

1. 变量1.1 变量定义a=1 : 直接赋值即可定义普通变量declare n : 定义普通变量declare -i n : 定义数值变量readonly n : 定义只读变量export n : 定义环境变量(环境变量为进程私有,可被子进程继承)local n : 定义局部变量(同名则在作用域覆盖全局变量)unset n : 取消定义变量1.2 变量使用使用变量内容: ...

2019-07-08 16:37:43 1512 2

原创 Linux Shell多线程编程之wait

一、& 介绍sleep 10 #等待10秒,再继续下一操作sleep 10 & #当前shell不等待,后台子shell等待使用&命令后,作业被提交到后台异步运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。二、wait命令介绍wait [作业指示或进程号]等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出...

2019-07-03 23:32:57 740

原创 记Hadoop3.1.2安装排错之ERROR: Cannot set priority of datanode process

问题在安装Hadoop过程中,对hdfs格式化(# $HADOOP_HOME/bin/hdfs namenode -format)之后,开始启动hdfs(# $HADOOP_HOME/sbin/start-dfs.sh)时,总是报错如下:ERROR: Cannot set priority of datanode process 3340解决方案在$HADOOP_HOME/etc/had...

2019-07-03 16:16:25 33131 7

原创 JDK11版HashMap源码全部解析(详细)-一文覆盖各方面

本文很长,详细描述了HashMap源码级别的实现原理,并讨论了包括扩容,hash计算,新建HashMap的开销等问题,同时还提供了一些外部资料。由于内容太多,建议阅读时结合目录快速跳转查看。

2019-05-11 16:18:32 1681

原创 深入解析Java泛型通配符类型

概述在Java中,通配符类型List<?>等价于List<? extends Object>,List<? extends Animal>则代表其可以被赋值为List或List等其子类,List<? super Cat>代表其可以被List赋值。对于采用extends形式的,主要用于读取(get),写入(set)就只能写入null对于采用sup...

2019-04-24 12:49:39 271

原创 Linux shell中的特殊变量

在Bash中有些变量比较特殊,会随情况而变:$_ 是上个命令的最后一个参数$? 上个命令的退出状态,或函数的返回值$! 最近一个后台命令的PID$n传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2$# 传递给脚本或函数的参数个数。$* 传递给脚本或函数的所有参数。$ @ 传递给脚本或函数的所有参数。被双引号(&amp;quot; &amp;quot;)包含时,与$*稍有...

2019-02-15 16:48:04 293

原创 java11使用VisualVm配置远程Jstatd与JMX连接

1.Jstatd:1.1配置jstatd.policy在java11中由于没有tools.jar,所以原有的配置jstatd.policy方式行不通jstatd.policy改成如下即可grant codebase &amp;quot;jrt:/jdk.jstatd&amp;quot; { permission java.security.AllPermission; };grant codebas...

2019-02-13 19:41:25 3251 2

原创 【杂】手机访问电脑开发的网站——通过Chrome DevTools

手机访问电脑开发的网站方法一:手机安装Chrome浏览器(应该要用安卓手机,并且开启开发者模式中的调试功能)电脑端用Chrome打开网址:chrome://inspect/#devices,如图假设电脑端开启了服务器在监听7070端口,则点开Discov USB devices 中的Port forwarding,并添加7070 : localhost:7070,如图方法二电...

2018-12-22 23:20:19 324

空空如也

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

TA关注的人

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