自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员白楠楠的博客

公众号:程序员白楠楠!

  • 博客(25)
  • 收藏
  • 关注

原创 太真实,北上广深年薪20W、30W、40W的程序员的生活状态!

日常工作中,小编的很大一部分时间都在与程序员群体打交道,研究他们的工作生活状态和职业发展路径。在外人眼中,程序员是一个既高薪又神秘的群体,那些年薪20W、30W、40W的程序员,大多是怎样一种生活和工作状态?财务是否更加自由?生活环境是否更加高大上?希望这三位生活在一线城市,年薪 20 W+、30 W+、40 W+的程序员,能用他们的经历给你答案。年薪20W+刘鑫,程序员,上海 - Java 开发工程师大学本科计算机专业,今年7月毕业,年龄24,年薪税前22W(18Kx12)吧,年终奖和奖金.

2020-09-29 21:24:39 4280

原创 这 5 个能挣钱的 SpringBoot 项目,真TMD香!

不得不佩服 Spring Boot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台开源版本的管理系统,小伙伴们再也不用从头到尾撸一个项目了,简直就是接私活,挣钱的利器啊。SmartAdmin我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱生活。SmartAdmin 让你从认识到忘不了,绝对是你最想要的!项目地址:https://gitee.com/lab1024/smart-a

2020-09-29 21:04:42 117

原创 这5个常问的Redis面试题你答得出来吗?(详细剖析)

面试常问问题一redis 集群模式的工作原理能说一下么?在集群模式下, redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?1、面试官心理分析在前几年,redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有codis,或者 twemproxy,都有。有一些 redis 中间件,你读写 redis 中间件,redis 中间件负责将你的数据分布式存储在多台机器上的 redis 实例中。这两年,redis 不断在发展,r..

2020-09-24 17:19:59 254

原创 面试官写了个双冒号: : 问我这是什么语法?Java中有这玩意?

一:简洁方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式静态方法引用,通过类名::静态方法名, 如 Integer::parseInt实例方法引用,通过实例对象::实例方法,如 str::substring构造方法引用,通过类名::new, 如 User::new二:方法引用public final class Integer { public static int parseInt(String s) throws Numb

2020-09-21 19:41:54 84

原创 骚操作:不重启 JVM,如何替换掉已经加载的类?

Java对象行为java.lang.instrument.Instrumentation直接操作字节码BTraceArthas三生万物在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”..

2020-09-20 16:41:30 108

原创 再见了SpringMVC!这个框架有点厉害,甚至干掉了Servlet!

# 前言对 Java 开发者来说, Spring 发布 5.0 正式版,而新版 Spring 的一大特色,就是 Reactive Web 方案 Web Flux,这是用来替代 Spring Web MVC 的吗?或者,只是终于可以不再基于 Servlet 容器了?# 基于 Servlet 容器的 Web MVC身为 Java 开发者,对于 Spring 框架并不陌生。它起源于 2002 年、Rod Johnson 著作《Expert One-on-One J2EE Design and Develop

2020-09-20 15:57:16 417

原创 Spring Boot 如何使用拦截器、过滤器、监听器?

过滤器过滤器的英文名称为 Filter, 是 Servlet 技术中最实用的技术。如同它的名字一样,过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请求,通常用作 Session 校验,判断用户权限,如果不符合设定条件,则会被拦截到特殊的地址或者基于特殊的响应。过滤器的使用首先需要实现 Filter接口然后重写它的三个方法init 方法:在容器中创建当前过滤器的时候自动调用destory 方法:在容器中销毁当前过滤器的时候自动调用doFilter

2020-09-20 15:16:21 117

原创 当女程序员遇到了问题......太真实了

00当女程序员遇到了问题01男程序员写代码的样子VS女程序员写代码的样子02别人家女程序员写代码的姿势(图自:微博@007小傻)03女程序员另类带娃方式04PHP女程序员最有效的自救方式05女程序遭遇HR死亡三连问06女程序员上班第一件事:调整IDE颜色以适配今天的衣着妆容07当女程序员戴上了假发08程序员女朋友如何给程序员男朋友过生日09请重视一个女程序员的努力…(图自:微博@GitChat )10幸福是有一个女程序员在你的生活中

2020-09-18 15:33:01 1245

原创 Mybatis接口Mapper内的方法为啥不能重载吗?

动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。言外之意就是为了增强目标target方法。上面这句话没错,但也不要认为它就是真理,殊不知,动态代理还有投鞭断流的霸权,连目标target都不要的科幻模式。注:本文默认认为,读者对动态代理的原理是理解的,如果不明白target的含义,难以看懂本篇文章,建议先理解动态代理。1. 自定义JDK动态代理之投鞭断流实现自动映射器Mapper首先定义一个pojo。public class User { private Integer id

2020-09-16 16:41:06 251

原创 真香!GitLab 和 Docker自动化部署SpringBoot应用...

Docker和Spring Boot是非常流行的组合,我们将利用GitLab CI的优势,并在应用程序服务器上自动构建,推送和运行Docker镜像。# GitLab CIGitlab CI/CD服务是GitLab的一部分。开发人员将代码推送到GitLab存储库时,GitLab CI就会在用户指定的环境中自动构建,测试和存储最新的代码更改。选择GitLab CI的一些主要原因:易于学习,使用和可扩展维护容易整合容易CI完全属于GitLab存储库的一部分良好的Docker集成

2020-09-16 16:35:14 659

原创 必须了解的mysql三大日志-binlog、redo log和undo log

日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括redo log 和 undo log ),本文接下来会详细介绍这三种日志。binlogbinlog 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog 是 mysql的逻辑日志,并且由 Server 层进行记录,使用任何存储引擎的

2020-09-15 20:24:26 399

原创 SpringBoot + Redis + 注解 + 拦截器来实现接口幂等性校验

一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理重复回调普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次等等二、常见解决方案唯一索引 – 防止新增脏数据token机制 – 防止页面重复提交悲观锁 – 获取数据的时候加锁(锁表或锁行)乐观锁 – 基于版本号version实现

2020-09-14 17:22:20 172

转载 架构师最常使用的5种架构模式及其适用场景分析(入门级)

好莱坞电影中有多少情节?一些电影评论家说只有五个。您可以采用几种架构来实现应用程序?目前大多数程序都使用下面提到的五种架构之一。在本文中,我将五种软件架构模式的优缺点以及适合场景提炼出来作为快速参考。你可以在单个系统中使用多个架构模式,它们的组合既是计算机科学,也是一门艺术。一、分层架构这种方法可能是最常见的方法,因为它通常围绕数据库构建,并且业务中的许多应用程序自然会倾向于将信息存储在RDBMS的表中。许多比较大的软件框架(例如Java EE,Drupal和Express)都是在这种架构下实现的,因

2020-09-14 16:54:38 957

原创 绝了!一个妹子 rm -rf 把公司整个数据库删没了...

经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据。对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错。也希望遇到问题的朋友能找到一丝灵感解决问题。01事故背景安排一个妹子在一台生产服务器上安装 Oracle,妹子边研究边安装,感觉装的不对,准备卸载重新安装。从网上找到卸载方法,其中要执行一行命令删除 Oracle 的安装目录,命令如下:rm -rf $ORACLE_BASE/* 如果 ORACLE_BASE 这个变量没有赋值,那命令就变成了:rm -rf /*

2020-09-14 16:38:31 1065 1

原创 14个Spring MVC顶级技巧,随时用随时爽,一直用一直爽~

通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出。这样就完成了典型的请求-响应周期的往返。今天整理了一下编写Spring MVC控制器的14个技巧,你今天get到了吗?(≧▽≦)/1.使用@Controller构造型这是创建可以处理一个或多个请求的控制器类的最简单方法。仅通过用构造型注释一个类@Controller ,例如:i

2020-09-14 16:29:38 64

原创 面试:如何从 100 亿 URL 中找出相同的 URL?

题目描述解答思路方法总结题目描述给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。解答思路每个 URL 占 64B,那么 50 亿个 URL占用的空间大小约为 320GB。“5, 000, 000, 000 * 64B ≈ 5GB * 64 = 320GB由于内存大小只有 4G,因此,我们不可能一次性把所有 URL 加载到内存中处理。对于这种类型的题目,一般采用分治策略 ,即:把一..

2020-09-13 15:52:01 411

原创 我还在生产玩 JDK7,JDK 15 却要来了!

自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15。恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 JDK 引入的新功能。这几天升级了 IDEA,顺便体验了一下 JDK15 的新特性。虽然我知道你们可能跟我一样JDK8 都还没用熟,但是无妨,看看新版本 JDK 来酸一下。Text Blocks 最终定板之前版本的 JDK,如果我们需要插入 HTML,XML,SQL 或 JSON 片段,非常麻烦,需要

2020-09-13 15:44:01 236 1

原创 昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了

引言都说 StringBuilder 在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差。最近我在测试数据导入效率的时候就发现我以前对 StringBuilder 的部分理解是错误的。后来我通过实践测试 + 找原理 的方式搞清楚了这块的逻辑。现在将过程分享给大家测试用例我们的代码在循环中拼接字符串一般有两种情况第一种就是每次循环将对象中的几个字段拼接成一个新字段,再赋值给对象第二种操作是在循环外创建一个字符串对象,每次循环向该字符串拼接新的内容。循环结束后得

2020-09-13 15:16:12 142

原创 学以致用!JDK 和 Spring 是如何优雅复用代码的

前言模板,顾名思义,它是一个固定化、标准化的东西。模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。场景问题程序员不愿多扯,上来先干两行代码网上模板方法的场景示例特别多,个人感觉还是《Head First 设计模式》中的例子比较好。假设我们是一家饮品店的师傅,起码需要以下两个手艺真简单哈,这么看,步骤大同小异,我的第一反应就是写个业务接口,不同的饮品实现其中的方法就行,像这样画完类图,猛地发现,第一步和第三步没什么差别,而

2020-09-11 16:59:39 129

原创 科普,想成为厉害的 Java 后端程序员,你需要懂这些

站在运筹帷幄的角度来看,一名厉害的 Java 后端程序员都需要懂得哪些知识呢?我想,这也是很多读者迫切想知道的一个问题,因为如果不站在一个宏观的角度的话,所有学过的知识点都是零散的,就感觉像一只迷路的小鹿,跌跌撞撞的,总感觉欠点火候,对吧?怎么把知识点串联起来,形成知识图谱或者知识体系,就显得非常重要了。接下来,我根据这些年磨破滚打的一些经验,给大家简单科普一下,如果有漏掉的内容,希望读者朋友们在留言区指出来。1)MVC 框架:MVC 模式是软件工程中的一种软件架构模式,可以把软件系统分为三个基本部分:

2020-09-11 15:35:19 537

原创 超级实用的Spring Boot 的三种启动方式,你更中意那种?

Spring-Boot 的启动方式主要有三种:1、运行带有 main 方法类2、通过命令行 java -jar 的方式3、通过 spring-boot-plugin 的方式一、执行带有 main 方法类这种方式很简单,我主要是通过 IDAE 的方式,进行执行。这种方式在启动的时候,会去自动加载 classpath 下的配置文件(这里只是单独的强调了 classpath 下,其实 Spring-Boot 有自己的加载路径和优先级的,日后在发布)。@RestController @EnableA

2020-09-09 19:27:39 681

原创 实战经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!

最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下:这里为了方便演示,我新建了一个user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引:01 insert ignore into即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数据字段设置了主键或唯一索

2020-09-09 19:23:47 1316

原创 Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回

无侵入式 统一返回JSON格式定义JSON格式定义JavaBean字段Result实体返回测试统一返回JSON格式进阶-全局处理(@RestControllerAdvice)@ResponseBody继承类ResponseBodyAdvice继承类RestControllerAdvice返回测试统一返回JSON格式进阶-异常处理(@ExceptionHandler))异常处理@ResponseStatus(不推荐)全局异常处理@Exceptio..

2020-09-08 17:20:41 130

原创 使用 IDEA 几分钟就重构了同事800 行“又臭又长“ 的类!真香!

最近在对已有项目进行扩展的时候,发现要改动的一个类它长 766 行,开放了近 40 个 public 接口,我流着泪把它给改完了。为了防止这样的惨剧再次发生在我的身上,我觉得有必要写一篇博客来让广大程序猿同胞知道代码重构的重要性“如果你身边有一个类写上千行的猿,一定要把此文转给 ta实际项目中,真的不建议类过长以及职责过多,非常不友好!!!另外,我在经历了几个项目之后,发现大部分情况下一个类一般是不会太长的,除非是这个类职责太多,再或者说自己没有抽取相应的逻辑/工具类方法。我觉得我们写代码不光

2020-09-08 17:08:58 252

原创 美团面试官:Integer 与 int 的区别? Integer 是如何实现节约内存和提高性能的?

AUTOBOXCACHEMAX参数JDK中其他类似的缓存在Java5中,为Integer的操作引入了一个新的特性,用来节省内存和提高性能。整型对象在内部实现中通过使用相同的对象引用实现了缓存和重用。上面的规则默认适用于整数区间 -128 到 +127(这个整数区间可以通过启动应用的虚拟机参数修改:-XX:AutoBoxCacheMax)。这种Integer缓存策略仅在自动装箱(autoboxing)的时候有用,使用构造器创建的Integer对象不能被缓存。Java 编译器把原始类型自动转换..

2020-09-07 21:04:55 164

空空如也

空空如也

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

TA关注的人

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