技术
文章平均质量分 85
程序员苟哥
这个作者很懒,什么都没留下…
展开
-
Egg.js 异常处理、中间件、jwt,实现接口权限控制
在程序执行时会有各种各样的异常情况,当异常出现我们能从控制台看出异常的原因,但是对前端来说不够人性化,不能够清晰,有些情况要给调用端返回友好的消息提示,利用自定义异常和全局异常处理就能很简单的解决。原创 2022-01-13 16:26:41 · 689 阅读 · 0 评论 -
Spring Boot实现用户注册验证全过程
在这篇文章中,我们将使用Spring Boot实现一个基本的邮箱注册账户以及验证的过程。我们的目标是添加一个完整的注册过程,允许用户注册,验证,并持久化用户数据。原创 2022-01-13 16:24:17 · 821 阅读 · 0 评论 -
面试官:order by 是怎样排序的?怎么优化?
刚换了新工作,用了两周时间准备,在 3 天之内拿了 5 个 offer,最后选择了广州某互联网行业独角兽 offer,昨天刚入职。这几天刚好整理下在面试中被问到有意思的问题,也借此机会跟大家分享下。原创 2022-01-08 17:13:34 · 552 阅读 · 0 评论 -
记一次网络请求耗时问题分析解决过程
两个月前的一个版本需要对接腾讯会议相关接口,需要接收腾讯会议事件变更回调,腾讯会议通过webhook的形式发送http请求到我们的测试环境服务中,**暂且称之为A服务,假设域名为a.test.abc.com**。原创 2022-01-05 20:49:58 · 1223 阅读 · 0 评论 -
运维:你们 JAVA 服务怎么又又又又出问题了,内存降不下来。
在上次在运维老哥**友好**的和我沟通之后,还消停没几天,今天又来找(问候)我了…… 运维:这个服务也是你们的吧,你看这个 JAVA 进程,内存占用都快 3 个 G 了,这机器才 4G,你们堆才配置 2G,都要告警了!这次是真的内存泄露了吧,不是我无知了吧!又来搞事情……这大哥是对我有意见吗?有了上次的经验,这回更自信了。还是按照惯例,先怼回去原创 2022-01-04 16:22:51 · 826 阅读 · 0 评论 -
某团面试题:hashCode 的值是怎么生成的?对象内存地址吗?
这种生成算法,使用的一种**Park-Miller RNG**的随机数生成策略。不过需要注意的是……这个随机算法在高并发的时候会出现自旋等待原创 2022-01-04 16:19:14 · 145 阅读 · 0 评论 -
Jenkins for Kubernetes实现Slave动态伸缩
Jenkins-Master的高可用。Kubernetes的RC或Deployment可以监控副本的存活状态(通过探针)和副本数量,如果Master出现无法提供服务的情况,就会重启或者迁移到其他节点。原创 2022-01-04 16:17:09 · 287 阅读 · 0 评论 -
Jenkins for Kubernetes实现Slave动态伸缩
Jenkins-Master的高可用。Kubernetes的RC或Deployment可以监控副本的存活状态(通过探针)和副本数量,如果Master出现无法提供服务的情况,就会重启或者迁移到其他节点。原创 2022-01-04 16:14:44 · 237 阅读 · 0 评论 -
MySQL 数据库 增删查改、克隆、外键 等操作
char 最多支持 255 个字符,char 如果存入数据的实际长度比指定长度要小,会补空格至指定长度;如果存入的数据的实际长度大于指定长度,低版本的 Mysql 会被截取前 255个 字符,高版本会报错。原创 2022-01-04 16:10:31 · 148 阅读 · 0 评论 -
面试官:如果你访问一个网站很慢,怎么排查和解决?
在计算机网络的应用层你了解多少,是否知道socket套接字有哪些?知道你的网站为什么访问慢吗?知道为什么fidder、Charles能抓到你的包吗?今天我们就来一一揭秘!原创 2022-01-04 16:07:56 · 477 阅读 · 0 评论 -
一个普通的开发日常-记一次缓存问题在实际开发中的解决方案
作为一个摸鱼大户,每天上班后看看热搜、听听音乐、刷刷知乎和同事扯扯闲淡,多么惬意而又美好的生活。但是生活啊,总是那么的不尽如人意。俗话说,摸鱼摸多了,人就废了。这不我顶着个位数QPS的压力去实现我们的首页,话不多说,先看业务需求。原创 2022-01-04 16:00:05 · 161 阅读 · 0 评论 -
JAVA CPU过载问题排查思路以及一键查询脚本
当我们遇到JAVA内存泄漏或者CUP居高不下的时候,一般怎么排查问题呢?首先我们看段代码,以下代码是当用户输入任意字符之后,开始启动三个线程,一个死循环,一个锁竞争,一个死锁。启动之后我们来看下CUP的一个变化。原创 2021-12-03 21:38:20 · 155 阅读 · 0 评论 -
求你了,别再说数据库锁的只是索引了
在MySQL数据库中,为了解决并发问题,引入了很多的锁机制,很多时候,数据库的锁是在有数据库操作的过程中自动添加的。所以,这就导致很多程序员经常会忽略数据库的锁机制的真正的原理。比如,我经常在面试中会问候选人,你知道MySQL Innodb的锁,到底锁的是什么吗?原创 2021-12-03 21:31:11 · 174 阅读 · 0 评论 -
习惯了微信聊天,利用WebSocket手动实现个聊天功能怎么样?
1.背景基于项目需求,最近需要实现一个简单的聊天功能。日常生活中,大家对于聊天也习以为常,微信、QQ等软件也经常用到,其实我们也可以引入一些第三方的sdk包等去实现,也可以利用WebSocket通信协议去手动实现简单的聊天。本文主要讲述下WebSocket实现的具体步骤及实现的效果图。2.方案选型及优缺点介绍方案一 利用http接口手动实现三个接口:sengMsg(消息发送)、receiveMsg(消息接收)、getHistoryMsg(获取历史消息) ,然后前端发送消息时调用sendMsg接口,将原创 2021-11-27 19:24:36 · 2419 阅读 · 4 评论 -
会使用自定义注解 ≈ 好的程序员?教你结合 AOP 切面打印请求日志
一、前言今天就带着大伙梳理一遍注解也就是 @interface 正确的打开方式,除此之外,结合 AOP 切面统一打印出入参日志,对于每个访问注解绑定的接口方法的请求都一目了然,不仅方便接口的调试,还能给你一个优雅、整齐且大方的控制台日志记录。二、效果演示2.1 访问接口2.2 控制台日志输出三、如何设计一个注解3.1 概念知其然,要知其所以然,所以我们先来康康官方对注解的描述是什么:An annotation is a form of metadata, that can be a原创 2021-11-25 17:22:01 · 455 阅读 · 0 评论 -
通俗易通,值得收藏的 java 设计模式实战,装饰者模式 之 你不用改变,就让你的能力变强了
文章目录什么是装饰者模式装饰者模式中的角色抽象构件(Component)角色具体构件(Concrete Component)角色装饰(Decorator)角色具体装饰(Concrete Decorator)角色测试的时候到了尾声什么是装饰者模式网络百科如下:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。设计模式和编程语言无关,但是二当家的依然用Java语言去实战举例。装饰者模式中的角色原创 2021-11-24 19:13:35 · 123 阅读 · 0 评论 -
10分钟认识RocketMQ,想进阿里连这个都不会?
一、消息中间件简介1.1、什么是什么MQMQ(Message Queue)是一种跨进程的通信机制,用于传递消息。通俗点说,就是一个先进先出的数据结构。有点像队列。1.2、MQ的应用场景1.2.1、异步解耦最常见的一个场景是用户注册后,需要发送注册邮件和短信通知,以告知用户注册成功。传统的做法如下:此架构下注册、邮件、短信三个任务全部完成后,才返回注册结果到客户端,用户才能使用账号登录。但是对于用户来说,注册功能实际只需要注册系统存储用户的账户信息后,该用户便可以登录,而后续的注册短信和邮件不原创 2021-11-24 19:12:42 · 165 阅读 · 0 评论 -
装在笔记本里的私有云环境:网络存储篇(上)
本篇是系列中的第三篇内容,我们继续聊聊如何把一个简化过的私有云环境部署在笔记本里,以满足低成本、低功耗、低延时的实验环境。在前两篇文章中,我们聊过了基础虚拟化相关的前置准备、以及为了避免在搭建过程中盲人摸象,而准备的监控服务。接下来我们来进行另外一个基础技术设施的搭建,网络存储服务。写在前面考虑到实际能够使用的资源有限,并且我们不希望监控、日志等基础服务的数据和这个通用的存储服务产生循环依赖,导致升级维护的时候“产生死锁”现象。所以,对于之前提到的监控日志(非归档数据)并暂时并不会使用这个方式进行存储原创 2021-11-08 15:39:05 · 443 阅读 · 0 评论 -
一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题
一. JVM内存区域的划分1.1 java虚拟机运行时数据区java虚拟机运行时数据区分布图:JVM栈(Java Virtual Machine Stacks): Java中一个线程就会相应有一个线程栈与之对应,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈,因此栈存储的信息都是跟当前线程(或程序)相关信息的,包括局部变量、程序运行状态、方法返回值、方法出口等等。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。堆(Heap): 堆是所有线程共享的,主原创 2021-11-02 15:09:20 · 178 阅读 · 0 评论 -
JAVA CPU过载问题排查思路以及一键查询脚本
一、常规查询方法当我们遇到JAVA内存泄漏或者CUP居高不下的时候,一般怎么排查问题呢?首先我们看段代码,以下代码是当用户输入任意字符之后,开始启动三个线程,一个死循环,一个锁竞争,一个死锁。启动之后我们来看下CUP的一个变化。1、CPU 100%代码片段package com.netty;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * 作者:原创 2021-10-31 15:57:42 · 148 阅读 · 0 评论 -
golang 打桩,mock 数据怎么玩?
工作中,很多公司都要求效能,要求自动化测试实际落地的过程中发现,要做单元测试,自动化测试,可能当前这个服务会依赖其他服务的数据,接口等等那么单测或者自动化的过程中,就可能会由于其他服务的原因或者环境因素导致测试失败,或者阻塞测试这是一个问题,必须得解决,我们可以采用 golang 自带的 mock 工具来完成,可以在一些必要的地方进行数据打桩,mock 数据gomock 是什么?是官方提供的 一个 mock 数据的 框架官方还提供了 mockgen 工具用来帮助 我们 生成测试代码github原创 2021-10-31 15:42:32 · 596 阅读 · 0 评论 -
Arthas中使用watch观测方法执行前后,基本类型参数的值不一致问题
一、背景某日晚,需要协助女朋友排查一个线上问题,其请求调用比较复杂,单次请求过来会多次通过不同路径调用存在问题的方法,并且还有很多重载的方法,排查过程中需要结合stack和各种条件判断,极其麻烦;期间也遇到了 Arthas中使用watch观测方法执行前后,基本类型参数的值不一致的问题。此问题的结论和原因虽然都比较简单,但其排查过程也可供学习记录。只想看结论的同学也可以直接看 第四点 !1.代码由于真实情况涉及公司业务,而且有很多无关紧要的逻辑,所以写了个超级简化版。package com.c原创 2021-10-30 14:03:24 · 574 阅读 · 0 评论 -
K8s工程化:K8s中的Java应用出现OOM后怎么办?
背景前段时间,线上系统出现了两次持续时间比较长的事故。这两次事故暴露我在某些方面的不足。同时,也意识到在SRE这个领域,经验的重要性。事故过程中,我们发现大量的FullGC。当时,我们想到了要dump内存出来分析,可惜发现没有加 -XX:HeapDumpPath 参数。同时,我们也发现,如果dump出来了,我们也没法拿到dump出来的文件。因为我们的应用是跑在K8s中的。方案调研经复盘,我们得到一个action:在Java应用出现OOM时,将内存dump出来,并持久化,并且方便分析。这个actio原创 2021-10-27 20:32:34 · 774 阅读 · 0 评论 -
消息序列化spring简直为我们做的太多了,差点我都不会自己序列化了
前言不知道你还记不记得我们当初在学习servlet的时候有句口号叫:【一杯茶一根烟,一个参数我传一天】是的,servlet的传参是真的复杂,在业务开始之前我们得将参数进行校验、格式化赋值等操作才能做业务开发。但是自从用了spring我们再也不愁了。更确切的说自从用了springboot我们被解放了。HttpMessageConverter在web开发中浏览器就是客户端、我们java程序放在tomcat等容器中就是服务端。客户端和服务端之间的交互时通过IO流的方式进行交互的。客户端需要保存数原创 2021-10-27 15:58:46 · 135 阅读 · 0 评论 -
记一次线上突发频繁fullGC的分析与解决
前情概要 4月份某天下午刚上班,春困之际,整个人还不是非常的清醒,结果钉钉开始收到告警,线上一台服务在非常频繁fullGC,一下子,整个人清醒多了,这个不是一个简单的告警,对服务的影响非常大。确实如此,没过几分钟,下游服务开始调用超时告警 我们公司内部的APM工具是pinpoint,可以看到服务超时13:50~14:03这段时间内服务响应时间有很多超过了5000ms找到出问题的那台"那台实例 红线表示fullGC,基本上这个实例处于不可用的状态,分发到这个实例的请求基本上也就是超时,原创 2021-10-26 21:22:13 · 386 阅读 · 1 评论 -
我惊呆了!阿里P7面试官问我:存在一个事务方法,参数是一个list,内部遍历list循环更新商品信息。这个api会出现死锁吗?
前言如标题所示,我们把这个事务方法的原型展示出来了,其代码如下所示:@Transactionalpublic void updateGoodsList(List<Goods> goodsList) { for (Goods goods : goodsList) { goodsDao.updateById(goods); }}逻辑非常简单,就是循环更新传入的goods,然后根据id更新goods表中对应的行信息,而且还拥有事务功能。但就是这么简单的一原创 2021-10-25 22:05:47 · 92 阅读 · 0 评论 -
通俗易通,值得收藏的 java 设计模式实战,装饰者模式 之 你不用改变,就让你的能力变强了
文章目录什么是装饰者模式装饰者模式中的角色抽象构件(Component)角色具体构件(Concrete Component)角色装饰(Decorator)角色具体装饰(Concrete Decorator)角色测试的时候到了尾声什么是装饰者模式网络百科如下:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。设计模式和编程语言无关,但是二当家的依然用Java语言去实战举例。装饰者模式中的角色转载 2021-10-22 22:20:31 · 243 阅读 · 0 评论 -
SpringBoot与Vue交互解决跨域问题【亲测已解决】
最近在利用springboot+vue整合开发一个前后端分离的个人博客网站,所以这一篇总结一下在开发中遇到的一个问题,关于解决在使用vue和springboot在开发前后端分离的项目时,如何解决跨域问题。在这里分别分享两种方法,分别在前端vue中解决和在后台springboot中解决。浏览器同源策略为什么会出现跨域问题? 首先一个定义一定要了解,就是浏览器的同源策略,什么是浏览器的同源策略, 简单来说就是浏览器发送请求的协议、域名和端口要和服务器接收请求的协议、域名以及端口一致。这样才能完成交互,但原创 2021-10-21 14:53:33 · 262 阅读 · 1 评论 -
spring系列:浅入浅出谈Spring循环依赖(全程干货)
前言哈喽大家好,我是苟哥最近被面试搞得很是烦躁,特别是看到一些面试官上来就黑着个脸,真想赶紧面试结束。可为了生活,还是得忍着,归根结底还是太菜了!最近有粉丝问到了循环依赖问题,以后再有人问你,拿这篇“吊打”他。概念什么是循环依赖?多个bean之间相互依赖,形成了一个闭环。比如:A依赖于B、B依赖于C、C依赖于A。通常来说,如果问Spring容器内部如何解决循环依赖,一定是指默认的单例Bean中,基于set方法构造注入的属性互相引用的场景。循环依赖的种类及能否解决如下:报错信息U原创 2021-10-21 14:52:29 · 92 阅读 · 0 评论 -
面试官:说说你对冒泡排序的理解?如何实现?应用场景?
一、是什么冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法冒泡排序的思想就是在每次遍历一遍未排序的数列之后,将一个数据元素浮上去(也就是排好了一个数据)如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”假如我们要把 12、35、99、18、76 这 5 个数从大到小进行排序,那么数越大,越需要把它放在前面思路如下:从后开始遍历,首先比较 18 和 76,发现 76 比 18 大,就把两个数交换顺序,得到 12、35、99、76、18接着比较 7原创 2021-10-21 14:51:16 · 222 阅读 · 0 评论 -
SQL 增删改查:我能玩出这花样儿?
???? 前言SQL是什么?官方解释:SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。SQL能用来干什么?通俗的讲:让您可以访问和处理数据库,包括数据插入、查询、更新和删除。SQL 对于现在的互联网公司生产研发等岗位几乎是一个必备技能,如果不会 SQL 的话,可能什么都做不了。可以把 SQL 当做是一种工具,利用它可以帮助你完成你的工作,创造价值。❤️ 情景学习下面让我们看看小美是如何零基础学习SQL的:原创 2021-10-20 21:31:05 · 75 阅读 · 0 评论 -
震惊!居然还有人用cv方式复制粘贴文件!快来看看IO流怎么实现叭!
前言在这个动不动就让你cmd,让你%temp%的时代里面,你还在用你的鼠标和cv吗?还要一个一个的去打开文件夹,cv文件吗?你low爆了,来看看不一样的我们咋搞得。文件的传输在我们得认知中,有多少和以前得我一样,觉得cv嗯真香,没有什么cv不了得,可是有没有想过cv鼠标难得点,尤其是,笔记本没有鼠标,用触摸板得我,很难受鸭! 那么我们今天一起看看没有鼠标得cv文件叭。File类一、 File类的定义① File类主要是Java为文件这一块的操作(删除,复制,粘贴,新增)而设计的相关类。原创 2021-10-20 21:29:47 · 153 阅读 · 0 评论 -
多线程之 AsyncTask 使用详解和从源码中深入理解 AsyncTask 机制
前言AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用;Android之所以提供AsyncTask这个类,就是为了方便我们在后台线程中执行操作,然后将结果发送给主线程,从而在主线程中进行UI更新等操作。在使用AsyncTask时,我们无需关注Thread和Handler,AsyncTask内部会对其进行管理,这样我们就只需要关注于我们的业务逻辑即可;一、AsyncTask介绍和使用1、AsyncTask介绍AsyncTask有四个重要的原创 2021-10-20 21:27:26 · 550 阅读 · 0 评论 -
使用 Nginx 提供 DDNS 服务(前篇)
本文将介绍如何使用 Nginx 作为一般 DDNS 程序的替代方案,完整配置在 200 行左右。相比较使用一些充满“黑盒”依赖,或者运行时复杂的程序,使用 Nginx 可以以更低的资源,来完成我们所需要的效果。写在前面之前在群里提到过这个方案,出于篇幅的原因,这个话题将会拆解为几部分,分别介绍:1、使用 Nginx 完成基础的 DDNS 核心操作,包括进行 DNS 记录更新。2、改进架构,在云端完成这一切,让服务的“兼容性”更好。3、使用 Nginx 来完成全私有化部署(包括 DNS )。为了原创 2021-10-12 21:17:22 · 333 阅读 · 0 评论 -
spring系列:浅入浅出谈Spring循环依赖(全程干货)
前言哈喽大家好,我是狗哥最近被面试搞得很是烦躁,特别是看到一些面试官上来就黑着个脸,真想赶紧面试结束。可为了生活,还是得忍着,归根结底还是太菜了!最近有粉丝问到了循环依赖问题,以后再有人问你,拿这篇“吊打”他。概念什么是循环依赖?多个bean之间相互依赖,形成了一个闭环。比如:A依赖于B、B依赖于C、C依赖于A。通常来说,如果问Spring容器内部如何解决循环依赖,一定是指默认的单例Bean中,基于set方法构造注入的属性互相引用的场景。循环依赖的种类及能否解决如下:报错信息U原创 2021-10-12 21:15:28 · 59 阅读 · 0 评论 -
我惊呆了!阿里P7面试官问我:存在一个事务方法,参数是一个list,内部遍历list循环更新商品信息。这个api会出现死锁吗?
前言如标题所示,我们把这个事务方法的原型展示出来了,其代码如下所示:@Transactionalpublic void updateGoodsList(List<Goods> goodsList) { for (Goods goods : goodsList) { goodsDao.updateById(goods); }}逻辑非常简单,就是循环更新传入的goods,然后根据id更新goods表中对应的行信息,而且还拥有事务功能。但就是这么简单的一原创 2021-10-07 17:00:15 · 92 阅读 · 0 评论 -
三年开发经验,字节跳动抖音组离职后,一口气拿到15家公司Offer
我这篇文章并不是简单的描述一些面试中的题,或者总结一些技术知识,而是想记录我整个的想法和准备的过程,以及一些心得体会,让大家更加全面的去看待工作、跳槽和生活(从我的角度,当然肯定有不合理的地方,大家借鉴就好)在字节跳动的两年时间中见证了抖音从百万日活到2.5亿、团队从10人到100多人的过程,技术上不同时期的选型以及迭代、沉淀和更替。项目上经历了一个工程到模块化再到组件化最后插件化,深刻理解项目不同阶段和不同体量的时候技术框架的选型。流程上不同阶段不同的方案,一直在探索最大的效率的协同开发。产品上从不断试原创 2021-09-06 21:26:34 · 2463 阅读 · 0 评论 -
大三就拿到字节提前批,你不想成长,生活总会逼着你成长
分享一波在读者群,应届生大佬的校招面试经历,目前手上已经拿到了 字节意向书,蚂蚁转正offer ,大佬是我在蚂蚁认识的一位师弟,个人能力很强,职业规划很清晰,源码钻研也很深入,给大家分享一波他的字节SP面经。楼主是周天下午4点到7点连续三面,第二天早上发的意向书,效率很快感觉全部是怼着简历问的,八股文问的比较少,全部是基于项目 实习的基础上去问的!感觉参考价值不是特别高,还是发出来给大家看看!一面1、因为项目做了基于netty的rpc框架,针对这个进行展开提问2、Reactor线程模型原创 2021-09-06 20:49:38 · 187 阅读 · 0 评论 -
春招失厉,狂刷 200+ 面试文档,终斩获头条,阿里 offer~(Java 岗)
从面试之前的准备,到面试后的总结,个人感觉在拿到 offer 之后还是有些想总结下来的东西,最近放假,把面试分享给大家。因为时间比较久了,可能会有一点疏漏,都是个人的想法,如有不妥请多包涵。本篇面试专题共包含:ActiveMQ、Dubbo、JVM、Kafka、Linux、memcached、MongoDB、MyBatis、MySQL、Netty、Nginx、RabbitMQ、Redis、Spring Cloud、Spring Boot、Spring MVC、Spring、SQL、Tomcat、zook原创 2021-09-06 15:53:13 · 165 阅读 · 0 评论 -
MySQL 数据库 增删查改、克隆、外键 等操作
目录1、SQL 字段数据类型2、查看数据库信息语句3、SQL 语句创建、删除 数据库 数据表向表中添加、删除 记录、查询记录修改表名,添加、修改、删除 字段,添加唯一约束查看、删除、添加 表中的索引扩展功能,字段值自增等4、数据表高级操作克隆表,将数据表的数据记录生成到新的表中删除记录后主键记录重头开始自增创建临时表5、创建外键约束,保证数据的完整性和一致性6、MySQL 六种约束数据库中有数据表,数据表中有一条一条的记录。可以用Navicat 等远程连接工具链接数原创 2021-09-05 21:45:57 · 246 阅读 · 0 评论