自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 资源 (3)
  • 收藏
  • 关注

原创 索引15连问

大家好,我是田螺。金三银四很快就要来啦,准备了索引的15连问,相信大家看完肯定会有帮助的。

2023-01-28 20:43:53 735 3

原创 字节三面:如何设计一个高并发系统

大家好,我是田螺。记得很久之前,去面试过字节跳动。如何设计一个高并发系统。当时我回答得比较粗糙,最近回想起来,所以整理了设计高并发系统的15个锦囊,相信大家看完会有帮助的。

2023-01-07 11:08:45 1420 1

原创 实战!接口优化的18种方案

大家好,我是捡田螺的小男孩。之前工作中,遇到一个504超时问题。原因是因为接口耗时过长,超过nginx配置的10秒。然后真枪实弹搞了一次接口性能优化从11.3s降为170ms。本文将跟小伙伴们分享接口优化的一些通用方案。本文我们介绍了,优化接口的18种方案。一起加油。

2022-11-18 09:00:15 2490

原创 做SQL性能优化真是让人干瞪眼

通常,这些关联的代码表都很小,可以先读入内存。避免大排序并不难,在内存中保持一个5条记录的小集合,遍历数据时,将已经计算过的数据前5名保存在这个小集合中,取到的新数据如果比当前的第5名大,则插入进去并丢掉现在的第5名,如果比当前的第5名要小,则不做动作。可惜的是,SQL 使用了无序集合概念,即使这些编号已经序号化了,数据库也无法利用这个特点,不能在对应的关联表这些无序集合上使用序号快速定位的机制,只能使用索引查找,而且数据库并不知道编号被序号化了,仍然会去计算 HASH 值和比对,性能还是很差!

2022-11-02 22:38:25 1033

原创 Java 下数据业务逻辑开发技术 JOOQ 和 SPL

Java 下数据业务逻辑开发技术 JOOQ 和 SPL

2022-10-17 08:45:05 237

原创 四万字!多线程50问!

大家好,我是捡田螺的小男孩

2022-08-22 08:03:52 700

原创 使用线程池的10个坑

大家好,我是捡田螺的小男孩。日常开发中,为了更好管理线程资源,减少创建线程和销毁线程的资源损耗,我们会使用线程池来执行一些异步任务。但是线程池使用不当,就可能会引发生产事故。今天田螺哥跟大家聊聊线程池的10个坑。大家看完肯定会有帮助的~线程池默认使用无界队列,任务过多导致OOM线程创建过多,导致OOM共享线程池,次要逻辑拖垮主要逻辑线程池拒绝策略的坑Spring内部线程池的坑使用线程池时,没有自定义命名线程池参数设置不合理线程池异常处理的坑使用完线程池忘记关闭。...

2022-08-16 08:36:33 6243 2

原创 聊聊工作中使用了哪些设计模式

前言大家好,我是捡田螺的小男孩。平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中,我都使用过哪些设计模式。工作中常用到哪些设计模式1.策略模式1.1 业务场景假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码:if(type=="A"){//按照A格式解析}elseif(...

2021-10-27 22:28:49 618

原创 日志打印的15个好建议

前言大家好,我是捡田螺的小男孩(公众号)。日志是快速定位问题的好帮手,是撕逼和甩锅的利器!打印好日志非常重要。今天我们来聊聊日志打印的15个好建议~1. 选择恰当的日志级别常见的日志级别有5种,分别是error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印info哈~ error:错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的; warn:警告日志,一般的错误,对业务影响不大,但是需要开发关注;

2021-09-22 22:31:33 1353 6

原创 1.6W字!梳理50道经典计算机网络面试题(收藏版)

前言金九银十马上要到了,整理了50道计算机网络面试题,每一道都非常的经典,大厂也非常喜欢问。希望大家看完后,都能找到理想的offer哈~ 公众号:捡田螺的小男孩 1. HTTP 常用的请求方式,区别和用途? GET: 发送请求,获取服务器数据 POST:向URL指定的资源提交数据 PUT:向服务器提交数据,以修改数据 HEAD:请求页面的首部,获取资源的元信息 DELETE:删除服务器上的某些资源。 CONNECT:建立连接隧道,用于代理

2021-07-25 17:38:51 3267 4

原创 面试必备!TCP协议经典十五连问!

前言TCP协议是大厂面试必问的知识点。整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀 公众号:捡田螺的小男孩 1. 讲下TCP三次握手流程开始客户端和服务器都处于CLOSED状态,然后服务端开始监听某个端口,进入LISTEN状态 第一次握手(SYN=1, seq=x),发送完毕后,客户端进入 SYN_SEND 状态 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端进入 SYN_RCVD 状态。

2021-07-11 20:34:34 915 8

原创 大厂经典面试题:Redis为什么这么快?

前言大家好呀,我是捡田螺的小男孩。我们都知道Redis很快,它QPS可达10万(每秒请求数)。Redis为什么这么快呢,本文将跟大家一起学习。 公众号:捡田螺的小男孩 基于内存实现我们都知道内存读写是比磁盘读写快很多的。Redis是基于内存存储实现的数据库,相对于数据存在磁盘的数据库,就省去磁盘磁盘I/O的消耗。MySQL等磁盘数据库,需要建立索引来加快查询效率,而Redis数据存放在内存,直接操作内存,所以就很快。高效的数据结构我们知道,MySQL索引为了提高效率,选择了

2021-06-27 12:46:24 534

原创 聊聊日常开发中,如何减少bug呢?

前言大家好呀~ 我是捡田螺的小男孩,今天跟大家聊聊聊聊日常开发中,如何减少bug?本文将从数据库、代码层面、缓存使用篇3个大方向,总结出一共60多个注意点,助大家成为开发质量之星。 欢迎关注公众号:捡田螺的小男孩 1. 数据库篇慢查询数据库篇的话,哪些地方容易导致bug出现呢?我总结了7个方面:慢查询、数据库字段注意点、事务失效的场景、死锁、主从延迟、新老数据兼容、一些SQL经典注意点。1.1 慢查询慢查询.gif1.1.1 是否命中索引提起慢查询,我们马上就

2021-06-20 09:52:58 472

原创 美团二面:Redis与MySQL双写一致性如何保证?

前言四月份的时候,有位好朋友去美团面试。他说,被问到Redis与MySQL双写一致性如何保证?这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题。公众号:捡田螺的小男孩谈谈一致性一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大弱一致性:这种一致性级别约束了系统在写入成功后,不承诺

2021-05-22 19:56:41 1322 3

原创 25种代码坏味道总结+优化示例

前言什么样的代码是好代码呢?好的代码应该命名规范、可读性强、扩展性强、健壮性…而不好的代码又有哪些典型特征呢?这25种代码坏味道大家要注意啦公众号:捡田螺的小男孩github地址1. Duplicated Code (重复代码)重复代码就是不同地点,有着相同的程序结构。一般是因为需求迭代比较快,开发小伙伴担心影响已有功能,就复制粘贴造成的。重复代码很难维护的,如果你要修改其中一段的代码逻辑,就需要修改多次,很可能出现遗漏的情况。如何优化重复代码呢?分三种情况讨论:同一个类的两个函数含有相

2021-05-16 19:19:45 4045

原创 七种方案!探讨Redis分布式锁的正确使用姿势

前言日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方...

2021-03-07 14:21:43 1287 1

原创 MySQL索引底层:B+树详解

前言当我们发现SQL执行很慢的时候,自然而然想到的就是加索引。对于范围查询,索引的底层结构就是B+树。今天我们一起来学习一下B+树哈~公众号:「捡田螺的小男孩」树简介、树种类B-树、B+树...

2021-02-16 13:36:58 1533 1

原创 阿里一面,给了几条SQL,问需要执行几次树搜索操作?

前言有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~ 本文我们分九个索引知识点,一起...

2021-01-31 13:19:09 1108 5

原创 程序员必备基础:如何安全传输存储用户密码?

前言我们开发网站或者APP的时候,首先要解决的问题,就是「如何安全传输和存储用户的密码」。一些大公司的用户数据库泄露事件也时有发生,带来非常大的负面影响。因此,如何安全传输存储用户密码,...

2021-01-03 08:44:22 703

原创 Java日常开发的21个坑,你踩过几个?

前言最近看了极客时间的《Java业务开发常见错误100例》,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~1. 六类典型空指针问题包装类型的空指针问题级联调用的空指针问...

2020-12-27 16:03:24 559

原创 写代码有这16个好习惯,可以减少80%非业务的bug

前言每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~github地址,感谢每颗st...

2020-11-26 00:10:50 15955 23

原创 10个经典又容易被人疏忽的JVM面试题

前言整理了10个经典又容易被疏忽的JVM面试题,谢谢阅读,大家加油哈github地址,感谢每颗star❝https://github.com/whx123/JavaHome❞公众号:「捡...

2020-11-23 00:16:19 1606

原创 15篇珍藏在抽屉里的原创文章~

前言大家周末愉快呀~ 最近转载比较多的原创文章(平均10+每篇),藏在公众号抽屉里已泛黄,我都拿出咯,大家可以看一下,都挺不错的。需要开白的小伙伴,可以在公众号回复开白,或者加我微信哈~...

2020-11-07 09:23:21 763 7

原创 MySQL中,21个写SQL的好习惯(修正版)

前言每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~公众号:「捡田螺的小男孩」1. 写完SQL先ex...

2020-11-03 00:14:29 6340 4

原创 5中方案告诉你,并发环境下,先操作数据库还是先操作缓存?

前言在分布式系统中,缓存和数据库同时存在时,如果有写操作,先操作数据库还是先操作缓存呢?本文将分5种方案阐述展开对比,谢谢阅读~github地址,衷心感谢每一颗star❝https://github.com/whx123/JavaHome❞缓存维护方案一如果是一读(线程B)一写(线程A)操作,「先操作缓存,再操作数据库」。流程图如下所示:1.线程A发起一个写操作,第一步del cache2.线程A第二步写入新数据到DB3.线程B发起一个读操作,cache miss缓存失效了。4.线

2020-10-24 19:46:08 275

原创 一文读懂线程池的工作原理(故事白话文)

前言本文以程序员做需求的例子,比喻线程池的工作过程。以故事白话的方式展开,跟大家阐述线程池工作原理,以方便大家更好理解线程池,谢谢阅读哈~什么是线程池?什么是核心线程?什么是阻塞队列?什...

2020-10-22 08:14:51 494

原创 程序员必备的基本算法:递归详解

前言递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它。在日常工作中,统计文件夹大小,解析xml文件等等,都需要用到递归算法。它太基础太重要了,这也是为什么面试的...

2020-10-14 08:06:45 1223

原创 一份Java程序员的珍藏书单,请您注意查收

前言不要因为迷茫,而停止了脚下的路。给大家推荐一份Java程序员必看的书单,豆瓣评分都挺不错的,每一本都值得去读,都值得去收藏,加油呀本文已经收录到github❝https://gith...

2020-09-30 17:53:29 795 1

原创 一次代码优化的实践(模板方法+策略+工厂方法模式)

前言好久没分享工作总结啦,今天来一份代码优化总结。用模板方法+策略+工厂方法模式优化了代码,耐心点看完,应该对大家有帮助的~本文已经收录到githubhttps://github.com/whx123/JavaHome公众号:捡田螺的小男孩优化代码前先来了解一下类似的业务场景,简言之,就是:多个商户接入我们系统,都是走一个类似的流程通过http请求出去的。优化前,每个公司对应一个句柄服务,伪代码如下:// 商户A处理句柄CompanyAHandler implements Reque

2020-09-23 07:20:39 374

原创 Java程序员必备基础:JDK 5-15都有哪些经典新特性

前言JDK 15发布啦~ 我们一起回顾JDK 5-15 的新特性吧,大家一起学习哈~本文已经收录到githubhttps://github.com/whx123/JavaHome公众号:捡田螺的小男孩Java 5 新特性1. 泛型泛型本质是参数化类型,解决不确定具体对象类型的问题。 List<String> strList=new ArrayList<String>();2. 增强循环(for-each)for-each循环简化了集合的遍历。String

2020-09-19 09:02:39 3431 8

原创 ZooKeeper的十二连问,你顶得了嘛?

前言一线大厂ZooKeeper的十二连问,你顶得了嘛?本文已经收录到github❝https://github.com/whx123/JavaHome❞1. 面试官:工作中使用过Zookeeper嘛?你知道它是什么,有什么用途呢?「小菜鸡的我:」有使用过的,使用ZooKeeper作为「dubbo的注册中心」,使用ZooKeeper实现「分布式锁」。ZooKeeper,它是一个开放源码的「分布式协调服务」,它是一个集群的管理者,它将简单易用的接口提供给用户。可以基于Zookeeper 实现诸

2020-09-01 23:52:04 394

原创 个人珍藏的80道多线程并发面试题(11-20答案解析)

前言个人珍藏的80道Java多线程/并发经典面试题,现在给出11-20的答案解析哈,并且上传github哈~https://github.com/whx123/JavaHome个人珍藏的80道多线程并发面试题(1-10答案解析)11、为什么要用线程池?Java的线程池内部机制,参数作用,几种工作阻塞队列,线程池类型以及使用场景回答这些点:为什么要用线程池?Java的线程池原理线程池核心参数几种工作阻塞队列线程池使用不当的问题线程池类型以及使用场景为什么要用线程池?线程池:一

2020-08-23 10:26:02 1043 1

原创 Java程序员面试必备:Volatile全方位解析

前言volatile是Java程序员必备的基础,也是面试官非常喜欢问的一个话题,本文跟大家一起开启vlatile学习之旅,如果有不正确的地方,也麻烦大家指出哈,一起相互学习~1.volatile的用法2.vlatile变量的作用3.现代计算机的内存模型(计算机模型,总线,MESI协议,嗅探技术)4.Java内存模型(JMM)5.并发编程的3个特性(原子性、可见性、有序性、happen-before、as-if-serial、指令重排)6.volatile的底层原理(如何保证可见性,如何保证指令重排,内

2020-08-11 07:27:41 1203 1

原创 个人珍藏的80道多线程并发面试题(1-10答案解析)

前言个人珍藏的80道Java多线程/并发经典面试题,因为篇幅太长,现在先给出1-10的答案解析哈,后面一起完善,并且上传github哈~https://github.com/whx123/JavaHome❞「公众号:捡田螺的小男孩」1. synchronized的实现原理以及锁优化?synchronized的实现原理synchronized作用于「方法」或者「代码块」,保证被修饰的代码在同一时间只能被一个线程访问。synchronized修饰代码块时,JVM采用「monitorenter

2020-07-28 22:46:20 678

原创 如何设计一个安全对外的接口?加签与验签了解一下

前言我们在求职面试中,经常会被问到,如何设计一个安全对外的接口呢? 其实可以回答这一点,加签和验签,这将让你的接口更加有安全。接下来,本文将和大家一起来学习加签和验签。从理论到实战,加油哦~密码学相关概念加签验签概念为什么需要加签、验签加密算法简介加签验签相关API加签验签代码实现公众号:捡田螺的小男孩本文已经收录到个人github,文章有用的话,可以给个star呀:https://github.com/whx123/JavaHome密码学相关概念明文、密文、密钥、加密、解密

2020-07-19 08:53:07 1573 1

原创 程序员必备基础:Git 命令全方位学习

前言掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~https://github.com/whx123/JavaHome公众号:捡田螺的小男孩文章目录Git是什么?Git的相关理论基础日常开发中,Git的基本常用命令Git进阶之分支处理Git进阶之处理冲突Git进阶之撤销与回退Git进阶之标签tagGit其他一些经典命令Git是什么在回忆Gi

2020-06-27 17:33:01 28416 26

原创 Java 异常处理的十个建议

前言Java异常处理的十个建议,希望对大家有帮助~本文已上传github:https://github.com/whx123/JavaHome公众号:捡田螺的小男孩一、尽量不要使用e.printStackTrace(),而是使用log打印。反例:try{ // do what you want }catch(Exception e){ e.printStackTrace();}正例:try{ // do what you want }catch(Exceptio

2020-06-14 16:03:14 1128

原创 50道Java集合经典面试题(收藏版)

前言来了来了,50道Java集合面试题也来啦~ 已经上传github:https://github.com/whx123/JavaHome1. Arraylist与LinkedList区...

2020-06-12 08:17:03 25968 8

原创 记一次接口性能优化实践总结:优化接口性能的八个建议

前言最近对外接口偶现504超时问题,原因是代码执行时间过长,超过nginx配置的15秒,然后真枪实弹搞了一次接口性能优化。在这里结合优化过程,总结了接口优化的八个要点,希望对大家有帮助呀~数据量比较大,批量操作数据入库耗时操作考虑异步处理恰当使用缓存优化程序逻辑、代码SQL优化压缩传输内容考虑使用文件/MQ等其他方式暂存,异步再落地DB跟产品讨论需求最恰当,最舒服的实现方式嘻嘻,先看一下我们对外转账接口的大概流程吧1.数据量比较大,批量操作数据入库优化前://for循环单笔入

2020-05-31 06:16:07 1355

转载 你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了...

正文相信大家都知道 TCP 是一个可靠传输的协议,那它是如何保证可靠的呢?为了实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就...

2020-05-26 23:55:30 814

红包随机算法实现

1.基于Java实现的红包随机分配算法, 2.先抢后抢拿到红包的大小的期望是大致相等的

2018-08-15

spring boot 调用微软小冰颜值评分

用Java(spring boot框架)实现,调用微软小冰颜值评分接口,实现上传用户头像,给颜值评分,返回分数结果。

2017-09-25

spring boot (Java)调用微软小冰实现给图片颜值评分

用Java实现的(spring boot 的demo),调用微软小冰接口(爬虫),给颜值评分。用户上传头像文件,可以得到颜值分数

2017-09-25

空空如也

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

TA关注的人

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