json命令行处理神器jq介绍
在当今数据驱动的世界中,处理JSON格式的数据已成为许多IT专业人士的日常任务。虽然Python等高级编程语言可以胜任这项工作,但它们往往需要编写复杂的脚本,耗时且容易出错。这就是jq命令行工具的亮点所在。 &ems...
OpenAI的结构化浅析
OpenAI于2024年8月6日在其新模型gpt-4o-2024-08-06上推出了结构化输出功能(Structured Outputs)。截至本文撰写日期(2024年8月25日),gpt-4o仍指向上一版本gpt-...
从大模型的原理到提示词优化
大语言模型(后文简称LLM)已经火热了近两年,相信大家或多或少都学习过一些Prompt技巧。但你有没有思考过:为什么使用这些Prompt能得到更好的输出结果?为什么有时你怎么试都得不到想要的结果?为什么有些任务LLM...
从经济学原理看团队分工合作
最近我接触到一个经济学概念叫"比较优势"。学过经济学的同学应该很熟悉,但为了让不了解经济学的朋友们也能明白,我们先来解释下什么是比较优势,然后再谈谈为什么我认为这个原理应当被用在团队合作的分工当中...
[翻译]关于人工智能的30个思考
最近看到一篇国外的文章,作者表述了自己关于人工智能的30个观点,部分观点还是很新颖的,特搬运翻译过来。 想了解AI工具的实用性,别只看新闻报道,亲自体验才能得出真知。 即便AI泡沫破裂,幸存者仍将塑造新的技术和社会文化格局。 AI不会直接夺...
从马斯洛需求层次理论谈职场激励
马斯洛需求层次理论是一个广为人知的心理学概念,它是由美国心理学家亚伯拉罕·马斯洛(Abraham Maslow)于1943年提出,常被描述为一个5层的金字塔模型,反映了人类不同需求层级和依赖关系。马斯洛认为人类只有在...
知识与智慧
前两天在medium上看到一篇文章,探讨知识(knowledge)和智慧(wisdom)之间的区别,很受启发,结合自己的经历和理解,形成此文: 何为知识 知识通常指的是信息的积累和对特定领域的...
如何使用大语言模型绘制专业图表
过去的一年里,我相信大部分人都已经看到了大语言模型(后文简称LLM)所具备的自然语言理解和文本生成的能力,还有很多人将其应用于日常工作中,比如文案写作、资料查询、代码生成……今天我要向大家介绍LLM的一种新使用方式—...
两个开源项目打造自己的大模型聚合平台
我在去年6月份就付费了Poe.com的年费会员,成为了各大模型的首批使用者,当时花了199\$,合算RMB近1.5k。你问我这钱花的值不值?我只能说开始的时候我觉得挺值的,毕竟gpt4那么贵而且api还需要排队才能使用,之后其他公司出的...
我让gpt4o给我推荐了一千多次书 得到了这些数据
事情是这样的,我们公司不是有个读书小组嘛,但是今年大家都忙于工作,忽视了读书这件事,所以我就想着搞个群机器人,让它明天定时向群里推荐一本书,用来唤起大家对读书的兴趣。但在调试的过程中就发现gpt4o老喜欢推荐同样的几本书,这可就勾起我的...
用Langchain创建一个可以总结网页内容的Agent
去年的时候我写过一篇关于OpenAi Function Call的实践文章,就是用Function Call的功能实现抓取并总结网页内容的功能,具体可以参考ChatGPT函数调用初体验:让ChatGPT具备抓取网页文...
推荐一个好用的命令行工具ShellGPT
这两天突然想到,现有的很多工具都在被大模型重构,比如诞生了像perplexity.ai 这种新交互形式的搜索引擎,就连wps也推出了AI服务,甚至都可以直接生成ppt,我就想是不是shell也有类似的工具,可以帮忙写...
关于ffmpeg height not divisible by 2的错误
在我们线上视频生产过程中,我们用ffmpeg对视频做了resize,讲原有的分辨率resize到1280p,使用了参数 -vf "scale=1280:-1",作用是将原始视频宽度缩放成1280,...
使用Certbot解决https证书自动更新的问题
除了各个第三方博客平台之外,我还一直保有一个自建的博客网站https://zxs.io/,还有几个其他的域名用做小工具之类的,之前一直使用阿里云免费https证书,一次申请可以用一年,但现在阿里云免费证书缩短到3个月...
Spring Cache简明教程
@[TOC](Spring Cache简明教程) 引言 在我上一篇文章如何正确使用缓存来提升系统性能中,我从偏理论的视角介绍了Cache在性能优化中的必要性,在这篇文章中我们介绍Spring全家桶中和cache相关S...
软件开发中的抓大放小vs极致细节思维
最近在开发过程中,遇到了好多次 “这个需求点这次要不要做?” 的问题, 主要有两方阵营,比如以研发主导的 “这次先不做、等必要的时候再做” ,另外一方是以PM主导的 “这个不做需求不完整,可能影响用户体验” 。争议主...
OpenAI Assistants-API简明教程
OpenAI在11月6号的开发者大会上,除了公布了gpt4-v、gpt-4-turbo等新模型外,还有一个assistants-api,基于assistants-api开发者可以构建自己的AI助手,目前assista...
OpenAI的多函数调用(Multiple Function Calling)简介
我在六月份写了一篇关于GPT 函数调用(Function calling) 的博客https://blog.csdn.net/xindoo/article/details/131262670,其中介绍了函数调用的方法...
如何使用ffmpeg制作透明背景的视频
最近我们尝试在网页上叠加数字人讲解的功能,发现如果直接在网页上放一个矩形的数字人视频,效果会很差,首先是会遮挡很多画面的内容,其次就是不管使用任何任务背景,画面都和后面的网页不是很协调,如图所示:\ 如果能去掉视频的背景,只展示人物...
spring-kafka中ContainerProperties.AckMode详解
近期,我们线上遇到了一个性能问题,几乎快引起线上故障,后来仅仅是修改了一行代码,性能就提升了几十倍。一行代码几十倍,数据听起来很夸张,不过这是真实的数据,线上错误的配置的确有可能导致性能有数量级上的差异,等我说完我们...
如何在地图上寻找最密集点的位置?
最近我在工作中遇到了一个小的需求点,大概是需要在地图上展示出一堆点中的点密度最密集的位置。最开始没想到好的方法,就使用了一个非常简单的策略——所有点的坐标求平均值,这个方法大部分的时候好用,因为大部分城市所有点位基本上都是围绕某个中心点...
IO密集型服务提升性能的三种方法
大部分的业务系统其实都是IO密集型的系统,比如像我们面向B端提供摄像头服务,很多的接口其实就是将各种各样的数据汇总起来,展示给用户,我们的数据来源包括Redis、Mysql、Hbase、以及依赖的一些服务方的数据,并...
职场中的基本归因错误和自利归因
今天我想和大家分享关于两个心理学概念:基本归因错误和自利归因。这两个概念描述了我们在评价他人和自身时,可能出现的两种思维偏差。不论我们处于什么场合,或许在工作中做自评和他评,或者是在日常生活中对他人行为的解读,所有人...
使用javax.validation.constraints校验参数合法性
在Java开发过程中,数据校验是一项至关重要的任务。为了确保数据的完整性和正确性,我们通常需要对输入的数据进行一系列的校验。javax.validation.constraints提供了一套基于注解的校验框架,能够让我们简洁、高效地完成数据...
Java Optional:让你的代码更优雅
在Java编程中,处理null值一直是一个棘手的问题。错误的null处理可能会导致许多难以调试的运行时异常。自Java 8引入Optional类以来,它为我们提供了一种更优雅、更安全的方式来处理可能为空的值。在Jav...
ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力
OpenAI在6月13号升级了ChatGPT,推出了类似其网页版插件的功能——函数调用(Function calling),13号当天我在很多微信公众号就看到了这个消息,甚至有人将函数调用称为杀手级特性,正好周末有空...
如何使用ChatGPT提升自己的“码”力?
ChatGPT是什么,我就不用再多介绍了吧!相信大家已经看到了它在文本领域所展现出来的实力,虽然目前的效果依旧无法比拟专业文字工作者,但其文字能力也超过了绝大多数普通人,主要还相当的便宜,让不少文字相关工作者瑟瑟发抖。不过今天我们不讨论...
使用ffmpeg拼接两张图片
最近在工作中遇到了一个需求,就是需要将两张图片拼接在一起,作为一个封面图。如果只是临时拼接一张,我们可以只用photoshop之类的图片编辑工具,将两张图片拼接在一起。而我们的需要是需要实现自动化,由于之前使用过ff...
ThreadPoolExecutor——高效处理并发任务的必备良器
@TOC ThreadPoolExecutor是Java concurrent中用于管理线程池的类,它是Executor框架的一个实现。线程池是一种提高应用程序性能和可靠性的技术,它将多个任务分配给多个线程执行,从而...
从CPU的视角看 多线程代码为什么那么难写!
当我们提到多线程、并发的时候,我们就会回想起各种诡异的bug,比如各种线程安全问题甚至是应用崩溃,而且这些诡异的bug还很难复现。我们不禁发出了灵魂拷问 “为什么代码测试环境运行好好的,一上线就不行了?”。 为了解决...
使用ffmpeg缩小视频体积的几种方式
随着视频制作的普及,视频文件的体积也越来越大,给存储和传输带来了很大的困扰。为了解决这个问题,我们可以使用FFmpeg这个强大的工具来缩小视频的体积。本文将介绍三种常用的方法:调整视频的分辨率、调整视频的码率和使用更...
Linux parallel 命令使用手册
引言 GNU Parallel是一个开源的命令行工具,可以将多个命令行作业并行执行。它可以用于在多个CPU或计算机上同时运行命令行作业,从而提高作业处理速度。Parallel还可以帮助您更好地利用系统资源,节省时间和...
为什么说过早优化是万恶之源?
Donald Knuth(高德纳)是一位计算机科学界的著名学者和计算机程序设计的先驱之一。他被誉为计算机科学的“圣经”《计算机程序设计艺术》的作者,提出了著名的“大O符号”来描述算法的时间复杂度和空间复杂度,开发了T...
Linux xargs命令介绍
Linux 中的 xargs 命令是一个非常有用的命令行工具,可以将一些参数集合传递给其他命令作为参数,并利用指定的命令进行处理。它可以帮助我们批量处理文件,执行一些需要多个参数的命令,并且支持并发操作。 &emsp...
深入理解Spring的事件通知机制
Spring作为一个优秀的企业级应用开发框架,不仅提供了众多的功能模块和工具,还提供了一种灵活高效的事件通知机制,用于处理组件之间的松耦合通讯。本文将详细介绍Spring的事件通知机制的原理、使用方法以及示例,希望...
Java高并发之CyclicBarrier简介
Java 中的 CyclicBarrier 是一种同步工具,它可以让多个线程在一个屏障处等待,直到所有线程都到达该屏障处后,才能继续执行。CyclicBarrier 可以用于协调多个线程的执行,以便它们可以在某个点上...
聊一聊过度设计!
新手程序员在做设计时,因为缺乏经验,很容易写出欠设计的代码,但有一些经验的程序员,尤其是在刚学习过设计模式之后,很容易写出过度设计的代码,而这种代码比新手程序员的代码更可怕,过度设计的代码不仅写出来时的成本很高,后续...
详解Redisson分布式限流的实现原理
我们目前在工作中遇到一个性能问题,我们有个定时任务需要处理大量的数据,为了提升吞吐量,所以部署了很多台机器,但这个任务在运行前需要从别的服务那拉取大量的数据,随着数据量的增大,如果同时多台机器并发拉取数据,会对下游服...
Java中使用HashMap时指定初始化容量性能一定会更好吗?
一些Java编程老手在做CodeReview时,都会告诉其他人,使用HashMap时建议指定容量大小,原因是指定容量后,代码性能会更好一些。后来随着阿里Java开发手册在业内广为传播,这一点早已深入人心,我自己也早已...
如何用ffmpeg截取视频片段&截取时间不准确的坑
之前在工作中,有遇到需要程序化截取视频片段的场景,这里使用ffmpeg命令行就可以很容易实现,这里也记录下我们使用过程中遇到的坑,希望对大家也有所帮助。 举个例子,当我们要截取视频文件中i...
XINDOO的2022年年终总结
已经好几个月没有认认真真写一篇博客了,借着年底静下心来认认真真写一篇年终总结,这也是我人生中第10篇的年终总结了。 先看下去年立的flag,不用想去年立的flag一个都没完成。首先1 算是勉强及格;2 redis的博...
使用ffmpeg将视频转成HLS(m3u8)格式
HLS (HTTP Live Streaming)是苹果推出的视频流协议,HLS格式的视频包含一个m3u8文本文件,以及众多的.ts的视频片段,而m3u8文本文件的作用就是将这些ts片段索引起来。 因为HLS协议是将...
谷歌Guava LoadingCache介绍
在工作中,加Cache是非常常见的一种性能优化手段,操作系统底层、计算机硬件层为了性能优化加了各种各样的Cache,当然大多数都是对应用层透明的。但如果你想在应用层加Cache的话,可能就需要你自己实现了。 &ems...
一万小时真的能成为专家吗?
今天不聊具体的技术问题,聊一聊个人成长的问题,大家可能对一万小时定律耳熟能详了, 作家格拉德威尔在《异类》一书中说道:“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。一万小时的锤炼是任何人...
聊聊Redis的数据热点问题
前两天,我们使用的某云厂商服务挂了,而且一挂就是挂大半天,我们的服务强依赖于他们,所以我们也跟着一起挂。然而我们却无能为力,只能等他们恢复。事故原因中听他们提到Redis有个热key,正好我在上家公司负责过部门Red...
用Netty实现WebSocket网络聊天室
最近学习Netty,学习到WebSocket一章节,将Netty中WebSocket的样例代码做了一些简单的改造,实现了一个简易的WebSocket网络聊天室,源码并非完全自己实现,只是将一些别人的代码做了下整合改造...
Notion 程序猿必备笔记软件
我发现工作时间比较久的人,都会逐渐养成记笔记的习惯,我也是,我之前已经使用国内某云笔记8年之久,而且是多年的会员。但我今天要给大家推荐另一款笔记软件——Notion,国内可能Notion的使用还比较少,但它却在国外非...
提效小技巧——记录那些不常用的代码片段
不知道大家有没有这样的经历? 某种代码操作,之前很少写,突然要用了但想不起来怎么写了;某个工具库很久没用了,现在想用了连库名都忘记了;某个命令行,曾经用过,现在已经忘记它有哪些参数了…… 这样的经历我反正是遇到好多次...
在netty中使用protobuf并实现数据加密传输
最近学习netty,为了实践一些知识点,写了一个小demo,完成了client和server端之间的加密数据传输,并使用了protobuf对数据进行封装,代码虽然简单,但对初学者学习netty应该会有些许帮助,特此记...
如何写出高性能代码(四)优化数据访问
同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员不是只存在于传说中,...
关于代码评审(CodeReview)那些不得不说的事儿
在一个成熟的团队中,CodeReview是整个研发流程中不可或缺的一步,而那些即将走向成熟的团队可能对CodeReview有很多的误解和问题,也不清楚CodeReview该如何去做,本文笔者将结合自己的经验和知识,谈...
如何写出高性能代码(三)优化内存回收(GC)
导语 同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员 不是只存在于...
如何写出高性能代码(二)巧用数据特性
导语 同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员 不是只存在于传说中,可能在我们的...
如何写出高性能代码(一)善用算法和数据结构
同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员不是只存在于传说中,可能在我们的周围也比...
使用python实现一个日期和时间戳互转的Alfred workflow
前两天换了新款的macbook,也不知道是不是因为m1芯片的原因,系统没有自带php,导致我之前使用的时间戳转换workflow失效了。作为一个后端工程师,时间戳互转的功能还是非常常用了,于是还折腾修复了下,手动安装php后可能是因为php...
2021渐入佳境
大家好,我是XINDOO,今天是2022年的第一天,写下我过去一年的自我总结。这已经是我连续第9年写总结了,等明年的时候可能会来个十年大总结(对我过去8年有兴趣可以看下文末链接)。 21年 疫情、经济下行、大厂裁员…… 可能影响了很多人,但...
为什么程序猿都应该学点linux命令?
大家好,我是xindoo,今天和大家分享下一个我的观点——程序猿都应该学点Linux命令!这也是这两年我做后端开发的切身体会。认识我的人可能都知道,我职业生涯比较“特殊”,我毕业后先是干的运维,然后再转的Java开发。 运维的经历苦不堪言,...
使用ffmpeg将图片拼接为视频
本文介绍下如何使用ffmpeg将大量图片拼接成一个视频,并介绍其中部分参数的含义。 使用ffmpeg将图片拼接成视频前,需要将图片文件名做下预处理,文件名中必须有数字将其次序标记出来,这里我直接使用数字将图片重命名了,如下: 直接使用命令f...
使用ffmpeg拼接视频踩坑记录
最近在工作中遇到一个ffmpeg的坑,特此记录下。我们在工作中,有个需求是将分段存储的视频拼接成一个完整的视频,发现使用ffmpeg拼接后视频时长不对。举个列子,我用ffmpeg将4个半小时的mp4视频拼接后,得到的视频长度远超过2小时,观...
Linux三剑客之awk入门指引
大家好 我是xindoo,距我上次发技术文章已经过去快一个半月了,原因是最近确实非常非常的忙,工作日除了吃饭睡觉之外,要么是在工作,要么就是在去工作的路上,而周末的时候我只想 今天1024 程序猿节,百忙中抽空发篇一直想写好久的文章来凑个热...
七张图了解kafka基本概念
kafka是apache基金会管理的开源流处理平台(官网http://kafka.apache.org/),但国内大多数人对其认知基本都是消息队列,所以我们先来了解下什么是消息队列。 消息队列 消息队列顾名思义就是存储消息的一个队列,消息生...
正则表达式的高级用法——正|反向预查
我之前一直自诩精通正则表达式(毕竟我实现过正则引擎),但关于正则表达式有几个特殊用法我一直都不熟,一来是用的少,二来确实也没花心思学过。正好这两天有需要用到预查的功能,索性就学习整理出今天的博文。 介绍下今天的4位主角 ?=、?<=、...
如何写好技术文档——来自Google十多年的文档经验
@[TOC] 本文大部分内容翻译总结自《Software Engineering at Google》 第10章节 Documentation。 另外,该书电子版近日已经可以免费下载了 https://abseil.io/resources...
某东14薪变16薪,是诚意还是套路?
上周朋友圈有好多刷屏事件,除了某滴被调查外,某司也宣布从两年内从14薪调整到16薪,博得了一大片好感。 然而在我看来这波涨薪真的毫无诚意,甚至 为什么这么说。来,先看几个具体的场景,以下内容纯属虚构,如有雷同那您就自认倒霉吧。 场景一:程序...
Redis源码剖析之GEO——Redis是如何高效检索地理位置的?
Redis GEO 用做存储地理位置信息,并对存储的信息进行操作。通过geo相关的命令,可以很容易在redis中存储和使用经纬度坐标信息。Redis中提供的Geo命令有如下几个: geoadd:添加经纬度坐标和对应地理位置名称。 geopo...
顶流博主都这么写文章标题,看完不会你来打我啊
我们小学三年级学写作文的时候就学过,一篇文章的标题是吸引读者的第一步,那技术文章的标题如何写才会有更高的点击率。 我呕心沥血总结了上百个热门文章的标题,总结出以下套路。我粗略将其分为10个类别,当然有些标题可以兼具多个类别的特征。 引发好奇...
凯文·凯利写给年轻人的99条人生建议(99 Additional Bits of Unsolicited Advice)
凯文·凯利写给年轻人的99条人生建议(99 Additional Bits of Unsolicited Advice)凯文·凯利(Kevin Kelly,网名 KK)是著名的科技评论家,曾经担任《连线》(Wired)杂志的第一任主编,他的...
5种解法的算法面试题 来看看你是青铜还是王者?
先来详细描述下这道题。在一个全为正整数的数组中找到总和为给定值的子数组,给出子数组的起始下标(闭区间),举个例子: 在[3 2 1 2 3 4 5]这个数组中,和为10的子数组是[1 2 3 4],所以答案应该是[2,5]。 和为15的子数...
Redis源码剖析之AOF
书接上回,上回我们详细讲解了Redis的RDB机制,RDB解决了redis数据持久化一部分的问题,为什么说一部分?因为rdb是redis中某一时刻的快照,那么在这次快照后如果数据有新的变更,它是不会被持久化下来的,必须得等到下次rdb备份。...
Redis源码剖析之RDB
我们小学三年级的时候就知道,redis是一个纯内存存储的中间件,那它宕机会怎么样?数据会丢失吗?答案是可以不丢。 事实上redis为了保证宕机时数据不丢失,提供了两种数据持久化的机制——rdb和aof。 rdb就定期将内存里的数据全量dum...
NAS打造自己的私有云存储
今天给大家分享下我的NAS搭建方案,去年双十一的时候入手了一套NAS设备,用了几个月时间,好用是好用,但确实还没发挥出其价值,目前它最大的功能就是给我的mac做time-machine备份,要是没这个备份的话,它就是家里另外一台积灰的电子设...
Redis源码剖析之内存淘汰策略(Evict)
Redis作为一个成熟的数据存储中间件,它提供了完善的数据管理功能,比如之前我们提到过的数据过期和今天我们要讲的数据淘汰(evict)策略。在开始介绍Redis数据淘汰策略前,我先抛出几个问题,帮助大家更深刻理解Redis的数据淘汰策略。 ...
30行代码实现蚂蚁森林自动偷能量
@ 虽然我支付宝加了好多好友,平时有很多能量可以偷,但由于太懒,至今一棵树都没种成,所以心心念念把偷能量这事自动化。之前通过用代码模拟手机点按的方式,实现了朋友圈自动点赞,但当时蚂蚁森林的操作流程要比朋友圈点赞复杂很多,所以当时就没有实现自...
Redis源码剖析之数据过期(expire)
我之前统计过我们线上某redis数据被访问的时间分布,大概90%的请求只会访问最新15分钟的数据,99%的请求访问最新1小时的数据,只有不到千分之一的请求会访问超过1天的数据。我们之前这份数据存了两天(近500g内存数据),如果算上主备的话...
[翻译]正则引擎的几种分类
正则表达式引擎是正则表达式匹配算法的基础。其有多种不同的实现,但大多数都是基于Henry Spencer的NFA引擎。 正则引擎有两个大分类,DFA和NFA,像Perl、Java、.Net、PHP、Python、Ruby……等大多是工具都是...
Redis源码剖析之robj(redisObject)
我们在之前的文章中已经了解过一部分Redis的数据结构了,尤其是dict 中讲到,可以把redis看做一个hashtable,存储了一堆的key-value,今天就来看下key-value中value的主要存储结构redisObject(后...
我的2020总结
对于大多数人来说,2020年啥也没干,就光见证历史了。前一段时间华盛顿邮报向读者征集如何描述2020年,一个九岁小孩拔得头筹。 过马路前你左右都看了,结果被潜水艇给撞了。 一句简单的调侃却道出了这一年的魔幻。 记得武汉封城那天晚上,我正好在...
Redis源码剖析之跳表(skiplist)
最近要换新工作了,借着新老工作交替的这段窗口放松了下,所以专栏拖更了,不过我心里毫无愧疚,毕竟没人催更。 不过话说回来天天追剧 刷综艺的日子也很是枯燥,羡慕你们这些正常上班的人,每天都有正经工作内容,感觉你们过的很充实。[狗头] 计算机领域...
面试题精选:神奇的斐波那契数列
斐波那契数列,其最开始的几项是0、1、1、2、3、5、8、13、21、34…… ,后面的每一项是前两项之和,事实上,斐波那契在数学上有自己的严格递归定义。 f0 = 0 f1 = 1 f(n) = f(n-1) + f(n-2) 斐波那契数...
awk实现类sql的join操作
awk、grep和sed被称为linux三剑客,事实上grep和awk我在日常工作中也常用到(sed用的比较少),可能有些人对awk了解比较少,我先大概介绍下。 很多人以为awk只是一个文本处理工具,实际上他们也是这么用的。但事实上它其实是...
[翻译]CAP理论及其证明
CAP是所有分布式系统的基础理论,任何分布式系统只能满足以下三种状态中的任意两种。 一致性(Consistency) 可用性(Availability) 分区容错性(Partition tolerance) 何为CAP理论? CAP理论是指...
今年是冷冬?我爬了北京10年的气温,哟 还真是!
WARNING: 非严谨气相数据分析,旨在表达数据分析过程,结论还是看看就好,更严谨的信息请查阅专业的气相资料。 10月份的北京,仿佛酷热的夏季戛然而止,然后变成了春夏秋冬随机播放的模式,与往年不同的是今年很多人都在说“今年比去年冷多了”。...
Redis源码剖析之快速列表(quicklist)
何为quicklist,上次说到ziplist每次变更的时间复杂度都非常高,因为必须要重新生成一个新的ziplist来作为更新后的list,如果一个list非常大且更新频繁,那就会给redis带来非常大的负担。如何既保留ziplist的空间...
Redis源码剖析之压缩列表(ziplist)
本来打算只用一篇文章来讲解Redis中的list,在实际写作过程中发现Redis中有多种list的实现,所以准备拆成多篇文章,本文主要讲ziplist,ziplist也是quicklist的基础。另外还有skiplist,skiplist虽...
面试题精选:单链表排序也能玩出花来
今天国庆节,祝大家中秋节快乐,顺便给大家拜个早年[狗头]。不过最近还在准备面试的同学们不要浪太狠,还是要好好学习的鸭。 单链表的排序在数据结构类的面试题中简直是集大成者,什么排序、链表、链表删除、添加…… 都能体现在单链表排序上,也非常考验...
Redis源码剖析之SDS(Simple Dynamic String)
SDS(simple dynamic string)是Redis提供的字符串的封装,在redis中也是存在最广泛的数据结构,它也是很多其他数据结构的基础,所以才选择先介绍SDS。 SDS也兼容部分C字符串API(strcmp,strlen)...
Redis源码剖析开篇
今年我启动了好几个比较有挑战的个人项目,比如写一门编程语言、成为一名视频UP主、写科幻小说…… 这些项目目前进度都很堪忧,一方面这些项目挑战都比较大,另一方面业余时间还要忙着吃吃喝喝、追剧、刷综艺、睡懒觉…… 不过有个项目进度不至于那么不堪...
面试题精选:字符串替换
字符串处理在程序猿日常工作工作中非常常见,常见到几乎各种语言中都已经封装好了字符串相关的API,我们只需要直接拿过来用就好。就拿Java为例,jdk中的String()类几乎封装了所有字符串相关的操作,其方法数量有近百个,几乎满足了程序猿所...
程序猿职场求生指南
职场法则: 只要你努力工作,办事靠谱,思虑周全,从不给领导添麻烦,从不向领导提要求。勤勤恳恳,兢兢业业…… 坚持下去,公司里的杂活,破事儿,棘手的事就都成了你的,而且你的老板会更有钱。 如何在职场中干最少的活拿最多的钱,一定是困扰大部分社畜...
面试题精选:数据伪造
这道题应该算是我原创的的一道题,来源于我遇到的一个具体需求。大致需求是已知一批数和每个数出现的次数,然后写个接口,每次调用都能返回已知数据中的某个数,且返回的概率和原始数据中每个数出现的概率一致,题目描述起来有些绕口,我们来举个实际的例子。...
我背着CSDN偷偷记录了大半年我博客数据
作为一个数据控+一个有追求的技术博主,总是希望自己能知道自己博客历史每日粉丝数量、阅读量、积分、评论……的数据,然而官方博客管理后台给展示的数据太少了,只有每日访问量、评论数、粉丝数、收藏数这几个数据,而且目前最多只能看最近一个月的数据。 ...
面试题精选:两个线程按顺序交替输出1-100
陆陆续续,各个公司的校招季都开始了,我也成为了我司的校招面试官,最近也面了不少同学了,面试过程中也发现了很多问题,即有面试者的、也有面试官的、更有自己的问题,这里先挖个坑,后续写个博客详细聊聊,感兴趣的同学可以关注下。另外,我也有个专栏《面...
Java中synchronized与ReentrantLock性能对比
前两天逛博客的时候看到有个人写了一篇博客说ReentrantLock比synchronized慢,这就很违反我的认知了,详细看了他的博客和测试代码,发现了他测试的不严谨,并在评论中友好地指出了他的问题,结果他直接把博客给删了 删了 了…… ...
如何把百度伪装成Google
作为技术人使用百度被鄙视?但因为种种原因无法使用Google,为了解决这个尴尬的问题,我历时数月潜心研发了一款chrome插件,可以将百度的logo换成google的logo,完美的解决这个尴尬的问题。妈妈再也不用担心我因为用百度搜索技术问...
如何制作一个可以自动更新的Github个人主页
Github近期上线一个新的功能,就是你在自己账号下创建一个和自己用户名同名的仓库,并在仓库下创建一个README.md文件,这个文件就会被展示在你的Github个人主页。源于markdown的强大描述能力,你可以在你的Github首页展示...
JDK11现存性能bug(JDK-8221393)深度解析
这是一篇鸽了很久的博客,因为博客内容和素材早就准备差不多了,但就是一直懒得整理,今天终于下定决心终于整理出来了,这也是这个bug JDK-8221393唯一一篇中文介绍博客。 先大致介绍下这个bug,准确说这个应该是jdk11新引入的zgc...
生日悖论是啥?我用它省了上百G的内存
@ 生日悖论: 是指在不少于 23 个人中至少有两人生日相同的概率大于 50%。例如在一个 30 人的小学班级中,存在两人生日相同的概率为 70%。对于 60 人的大班,这种概率要大于 99%。从引起逻辑矛盾的角度来说,生日悖论并不是一种 ...
[翻译]虚拟内存介绍
原文地址An introduction to virtual memory 计算机是用来执行简单任务的复杂机器:比如 上网、文本编辑、网页服务、视频游戏……,还可以对数据进行操作,图片 音乐 文本 数据库…… 当计算机不使用的时候,程序和数...
Json字段选取器介绍和实现
最近为了工作方便写了一个小工具,这个小工具作用很简单,就是从一个json字符串中筛出你想要的部分。 介绍 背景是这样的,我们为了线上调试方便,有个工具可以模拟发起一次数据请求,然后将结果以json的形式展示到页面上。但问题是这个数据包含的信...
从0到1打造正则表达式执行引擎(二)
在上篇博客从0到1打造正则表达式执行引擎(一)中我们已经构建了一个可用的正则表达式引擎,相关源码见https://github.com/xindoo/regex,但上文中只是用到了NFA,NFA的引擎建图时间复杂度是O(n),但匹配一个长度...