- 博客(81)
- 收藏
- 关注
原创 为什么部分程序员下班后只关显示器不关电脑?
事情是酱婶的,知乎上有个提问: 为什么部分程序员下班后只关显示器不关电脑? 公司新入几名程序员,下班时发现他们只关显示器而不关电脑,说担心有什么问题可以第一时间远程登录来解决,请问这样对公司来说有什么安全隐患吗?程序员下班不关电脑是习惯性的吗? ————————背景分割线—————————— 发完问题后,这位提问者默默的帮这几位新来的程序员把电脑关掉了,顿时觉得自己又为保障公司安全、节省公司资源贡献了一份力量,一股自豪感油然而生!感觉寄几棒棒哒! 结果第二天…… 被关电脑当...
2021-01-29 16:11:45
477
原创 RabbitMQ 消息 100% 投递的解决方案!
一、前言 现在大多都使用 MQ 来做系统的异构,来做系统的解耦,系统的的模块相当于寄信者与收信者,MQ 则扮演者邮局的角色。 今天我们就来研究一下如何确保消息的100%的投递。 二、先谈谈 RabbitMQ 的特性 RabbitMQ所做的确保是:只需你把消息投递到Broker中,那么我就确保这个消息1会送到消费者的手中 当然这是有前提条件的,比如: 你需要进行手动应答,最起码 Broker 不挂,且消息进行了持久化等。 结合 RabbitMQ 的特性来做分析,针对于投递端,我们只需要确保把消息发送到 Br
2021-01-20 16:06:21
354
原创 问题:Session的销毁方式到底有哪些?
Session,作为我们离不开的后台的技术,它的出现主要是为了解决 Http 协议的无状态特点,用于解决用户状态的存储问题,而往往对于存储来说都会涉及到一个时间问题,下面我们来看看它的销毁方式到底有哪些。 销毁的方式 默认时间到期 自己设定到期时间 立刻失效 关闭浏览器 关闭服务器 案例实操 默认时间到期 当客户端第一次请求 servlet 并且操作 session 时,session 对象生成,以 Tomcat 为例,Tomcat 中 s..
2021-01-12 16:26:12
259
原创 微服务中的网关到底是个什么鬼?
一、API网关的用处 API网关我的分析中会用到以下三种场景。 1、Open API 企业需要将自身数据、能力等作为开发平台向外开放,通常会以rest的方式向外提供。最好的例子就是淘宝开放平台、腾讯公司的QQ开发平台、微信开放平台。 Open API开放平台必然涉及到客户应用的接入、API权限的管理、调用次数管理等,必然会有一个统一的入口进行管理,这正是API网关可以发挥作用的时候。 2、微服务网关 微服务的概念最早在2012年提出,在Martin Fowler的大力推广下,微服务在2014年后得到了大力发
2020-11-27 15:36:10
688
原创 自己动手实现一个简单的 IOC,牛皮!!
我们将分为几步来编写简易 IOC,首先设计组件,再设计接口,然后关注实现。 设计组件。 我们还记得Spring中最重要的有哪些组件吗?BeanFactory 容器,BeanDefinition Bean的基本数据结构,当然还需要加载Bean的资源加载器。大概最后最重要的就是这几个组件。 容器用来存放初始化好的Bean,BeanDefinition 就是Bean的基本数据结构,比如Bean的名称,Bean的属性 PropertyValue,Bean的方法,是否延迟加载,依赖关系等。资源加载器就简单了,就是
2020-11-27 15:35:16
229
原创 IntelliJ IDEA 超实用技巧分享,不能再全了!
前言 工欲善其事 必先利其器 最近受部门的邀请,给入职新人统一培训IDEA,发现有很多新人虽然日常开发使用的是IDEA,但是还是很多好用的技巧没有用到,只是用到一些基本的功能,蛮浪费IDEA这个优秀的IDE。如果你没有激活码,关注公众号Java技术栈回复idea可以阅读正规获取激活码的几种获取方式。 同时,在这次分享之后,本人自己也学习到了一些新的使用技巧,所以借着这次机会,一起分享出来。希望可以帮到一些人。 基于的 IDEA 版本信息:IntelliJ IDEA 2018.2.2 (Ultimate
2020-11-27 15:32:59
173
原创 为什么 Java 中 “1000==1000” 为 false,而 ”100==100“ 为 true?
为什么 Java 中“10001000”为false,而”100100“为true? 这是一个挺有意思的讨论话题。 如果你运行下面的代码: Integer a = 1000, b = 1000; System.out.println(a == b);//1 Integer c = 100, d = 100; System.out.println(c == d);//2 你会得到 false true 基本知识:我们知道,如果两个引用指向同一个对象,用表示它们是相等的。如果两个引用指向不同的对象,用表示它
2020-11-24 11:11:02
163
原创 分布式服务的幂等性设计,值得学习!
编程中的“幂等性”是指任意多次执行所产生的影响,与一次执行的影响相同。一个拥有幂等性设计的接口,保证无论一次或多次来调用接口,都能够得到相同的结果。接口的幂等性设计在某些场景下是必需的,例如用户下单的场景。 我们知道,服务之间的调用存在三种状态:成功、失败、超时。超时是一种未知的状态:被调服务是否执行成功,这个状态是未知的。上游服务调用下游服务超时时可能会进行重试。对于用户下单的场景的超时重试我们考虑以下问题: 是否会导致最终创建了两条一样的订单? 是否会扣除两遍库存? 是否会重复扣除用户的钱? 如果
2020-11-24 11:10:09
161
原创 if else 太多?看我用 Java 8 轻松干掉!
之前我用 Java 8 写了一段逻辑,就是类似下面这样的例子: /* * 来源公众号:Java技术栈 */ if(xxxOrder != null){ if(xxxOrder.getXxxShippingInfo() != null){ if(xxxOrder.getXxxShippingInfo().getXxxShipmentDetails() != null){ if(xxxOrder.getXxxShippingInfo().getXxxShipmentDetails().getXxx
2020-11-24 11:09:00
297
原创 MySQL 的慢 SQL 怎么优化?
索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本。MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的。 MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化。 一、导致SQL执行慢的原因 硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。 没有索引或者索引失效。(一般在互联网公司,DBA会在半夜把表锁了,重新建立一遍索引,因为当你删除某个数据的时候,索引的树结构就
2020-11-23 11:10:37
307
原创 为什么 Eureka 比 ZooKeeper 更适合做注册中心?
简介 Eureka本身是Netflix开源的一款提供服务注册和发现的产品,并且提供了相应的Java封装。 在它的实现中,节点之间相互平等,部分注册中心的节点挂掉也不会对集群造成影响,即使集群只剩一个节点存活,也可以正常提供发现服务。哪怕是所有的服务注册节点都挂了,Eureka Clients(客户端)上也会缓存服务调用的信息。这就保证了我们微服务之间的互相调用足够健壮。 Zookeeper主要为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。曾经是Hadoop项目中的一个子项目,用来控制集群中的
2020-11-23 11:08:52
156
原创 Cglib 如何实现多重代理?
由于 Cglib 本身的设计,无法实现在 Proxy 外面再包装一层 Proxy(JDK Proxy 可以),通常会报如下错误: Caused by: java.lang.ClassFormatError: Duplicate method name "newInstance" with signature ".......... at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.define
2020-11-23 11:08:02
205
原创 求求你们了,别再写满屏的 if/ else 了!
为什么我们写的代码都是 if-else? 程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个 if-else,可随着代码逻辑不断完善和业务的瞬息万变:比如需要对入参进行类型和值进行判断;这里要判断下对象是否为 null;不同类型执行不同的流程。 落地到具体实现只能不停地加 if-else 来处理,渐渐地,代码变得越来越庞大,函数越来越长,文件行数也迅速突破上千行,维护难度也越来越大,到后期基本达到一种难以维护的状态。 虽然我们都很不情愿写出满屏 if-else 的代码,可逻
2020-11-20 15:37:08
167
原创 MySQL 8.0 新特性:哈希连接(Hash Join)
MySQL 开发组于 2019 年 10 月 14 日 正式发布了 MySQL 8.0.18 GA 版本,带来了一些新特性和增强功能。其中最引人注目的莫过于多表连接查询支持 hash join 方式了。 我们先来看看官方的描述: MySQL 实现了用于内连接查询的 hash join 方式。例如,从 MySQL 8.0.18 开始以下查询可以使用 hash join 进行连接查询: SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1; Hash join 不需要索引的支持。大多数
2020-11-20 15:35:29
278
原创 ArrayList 和 LinkedList 哪个更占空间?
今天介绍一下Java的两个集合类,ArrayList和LinkedList,这两个集合的知识点几乎可以说面试必问的。 对于这两个集合类,相信大家都不陌生,ArrayList可以说是日常开发中用的最多的工具类了,也是面试中几乎必问的,LinkedList可能用的少点,但大多数的面试也会有所涉及,尤其是关于这两者的比较可以说是家常便饭,所以,无论从使用上还是在面试的准备上,对于这两个类的知识点我们都要有足够的了解。 ArrayList ArrayList是List接口的一个实现类,底层是基于数组实现的存储结构,
2020-11-20 15:34:38
280
原创 MySQL 实现一个简单版搜索引擎,真是绝了!
MySQL 实现一个简单版搜索引擎,真是绝了! 前言 只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的) char、varchar、text类型字段能创建全文索引(fulltext index type) 全文索引的基于关键词的,如何区分不同的关键词了,就要用到分词(stopword) 英文单词用空格,逗号进行分词;中文分词不方便(一个句子不知道怎样区分不同的关键词) 内置分词解析器ngram支持中文,日文
2020-11-18 14:55:38
469
原创 Redis 6.0 新特性,多线程连环 13 问!
Redis 6.0 新特性,多线程连环 13 问! Redis 6.0 来了 — 在全国一片祥和IT民工欢度五一节假日的时候,Redis 6.0不声不响地于5 月 2 日正式发布了,吓得我赶紧从床上爬起来,学无止境!学无止境! 对于6.0版本,Redis之父Antirez在RC1版本发布时(2019-12-19)在他的博客上连续用了几个“EST”词语来评价: the most “enterprise” Redis version to date // 最”企业级...
2020-11-18 14:54:55
268
原创 写在前面的话
# 写在前面的话 ** ** 在前面我们已经看过了一些流的处理,那么Lambda除了在写法上的不同,还有其它什么作用呢?当然有,就是数据并行化处理! 它在某些场景下可以提高程序的性能。我们先看一个前面的例子,查找所有的男同学 // 流方式List<Person> newBoys = personList.stream().filter(p -> 1 == p.getSex()).collect(Collectors.toList()); 现...
2020-11-17 15:46:29
132
原创 今天公司线上出了一个bug,看看是怎么解决的
今天公司线上出了一个bug,发送短信的内容中,点位符替换错误,原因就是字符串的replace方法 短信模板类似: {$var}您好:您办理的{$var}业务已到期,请处理! 模板中变量{$var}用参数替数组换掉,比如{"张三","人人有功练"} 看下原代码处理 @Testp...
2020-11-17 15:46:00
220
原创 超赞!终于有人把Linux系统结构讲清楚了~
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。 1. linux内核 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图: 系统调用接口:SCI 层提供了某些机制执行...
2020-11-17 15:40:54
848
原创 在尚学堂学习的第二十四天(持续更新中)
java13编程基础面向对象深入1 大纲 类与对象 面向对象与面向过程 面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言
2020-11-16 11:52:09
238
原创 Java-语言编程
自定义类与对象 自定义类 做了关于对象的很多介绍,终于进入代码编写阶段。本节中重点介绍类和对象的基本定义,属性和方法的基本使用方式。 定义类(类的组成) 属性 field 方法 method 构造方法 construtor 其他:代码块 静态代码块 内部类 属性(field 成员变量) 属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。 在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。 表4-2 成员变量的默认值 数据类型 默认值 整型 0 浮点
2020-11-16 11:48:00
124
原创 java13编程基础面向对象深入
java13编程基础面向对象深入1 大纲 类与对象 面向对象与面向过程 面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言
2020-11-16 11:26:54
99
原创 在上海尚学堂学习的第二十三天,分享一下所学经验
创建节点和插入节点 很多时候我们想要在某个位置插入一个新的节点,此时我们首先需要有一个节点存在,可以通过以下几种方式创建新节点。 创建节点 方法 描述 createElement() 创建一个新的节点,需要传入节点的标签名称,返回创建的元素对象 createTextNode() 创建一个文本节点,可以传入文本内容 innerHTML 也能达到创建节点的效果,直接添加到指定位置了 插入节点 方法 描述 write() 将任意的字符串插入到文档中 append
2020-11-15 08:54:20
166
原创 Java-语言编程
创建节点和插入节点 很多时候我们想要在某个位置插入一个新的节点,此时我们首先需要有一个节点存在,可以通过以下几种方式创建新节点。 创建节点 方法 描述 createElement() 创建一个新的节点,需要传入节点的标签名称,返回创建的元素对象 createTextNode() 创建一个文本节点,可以传入文本内容 innerHTML 也能达到创建节点的效果,直接添加到指定位置了 插入节点 方法 描述 write() 将任意的字符串插入到文档中 append
2020-11-15 08:53:22
163
原创 上海尚学堂-语言编程
DOM对象 DOM:Document Object Model 文档对象模型 要实现页面的动态交互效果,bom 操作远远不够,需要操作 html 才是核心。如何操作 htm,就是 DOM。简单的说,dom 提供了用程序动态控制 html 接口。DOM即文档对象模型描绘了一个层次化的节点树,运行开发人员添加、移除和修改页面的某一部分。dom 处于javascript 的核心地位上。 每个载入浏览器的 HTML 文档都会成为 Document 对象。Document 对象使我们可以从脚本中对 HTM
2020-11-15 08:52:52
157
原创 BOM对象-Java编程
BOM对象 BOM的核心对象是window,它表示浏览器的一个实例。window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以window作为其Global对象,因此有权访问parseInt()等方法。如果页面中包含框架,则每个框架都拥有自己的window对象,并且保存在frames集合中。在frames集合中,可以通过数值索引(从0开始,从左至右,从上到下)或者框架的名称来访问
2020-11-12 09:13:37
202
原创 Java-语言编程
事件捕获 Netscape提出的另一种事件流叫做事件捕获,事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预定目标之前捕获它。还以前面的例子为例。那么单击元素就会按下列顺序触发click事件: 1、document 2、 3、 4、 在事件捕获过程中,document对象首先接收到click事件,然后沿DOM树依次向下,一直传播到事件的实际目标,即元素。 虽然事件捕获是Netscape唯一支持的事件流模式,但很多主流
2020-11-12 09:12:38
167
原创 java -JS事件
JS事件 主要内容 事件 事件 (Event) 是 JavaScript 应用跳动的心脏 ,进行交互,使网页动起来。当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了。事件可能是用户在某些内容上的点击、鼠标经过某个特定元素或按下键盘上的某些按键。事件还可能是 Web 浏览器中发生的事情,比如说某个 Web 页面加载完成,或者是用户滚动窗口或改变窗口大小。 通过使用 JavaScript ,你可以监听特定事件的发生,并规定让某些事件发生以对这些事件做出响应。 作用 (1)验证用户输入的数
2020-11-12 09:08:58
226
原创 语言编程
3.8 回调函数(learn,study) 什么是回调函数? 当一个函数作为另一个函数的参数时,作为参数的函数被称之为回调函数。 3.9 函数的自调用(沙箱) function前面加上一些操作符,这样js引擎在解析的时候就不会把它当成是函数声明了 什么是沙箱? 沙箱:就是与外界隔绝的一个环境,外界无法修改该环境内的任何信息(沙箱内的东西单独属于一个世界) JS中的沙箱模式:还是通过函数来实现的 <1>沙箱模式的基本模型:自调用函数 (function(){ var a
2020-11-11 16:46:12
114
原创 Java-编程
6.2 Date函数 Date对象是一个构造函数,对它使用new命令,会返回一个Date对象的实例。 一些其他合法的日期字符串写法 new Date(datestring) new Date(“2013-2-15”) new Date(‘2013/2/15’) new Date(“2013-FEB-15”) new Date(“FEB, 15, 2013”) new Date(“FEB 15, 2013”) new Date(“Feberuary, 15, 2013”) new Date(“Feb
2020-11-11 16:45:44
104
原创 上海尚学堂-语言编程
3.8 回调函数(learn,study) 什么是回调函数? 当一个函数作为另一个函数的参数时,作为参数的函数被称之为回调函数。 3.9 函数的自调用(沙箱) function前面加上一些操作符,这样js引擎在解析的时候就不会把它当成是函数声明了 什么是沙箱? 沙箱:就是与外界隔绝的一个环境,外界无法修改该环境内的任何信息(沙箱内的东西单独属于一个世界) JS中的沙箱模式:还是通过函数来实现的 <1>沙箱模式的基本模型:自调用函数 (function(){ var a
2020-11-11 16:45:10
134
原创 Java-语言编程
3.3 数组的基本操作-增删改查(函数) push():向数组的尾部添加数据 unshift():向数组的头部添加数据 pop():删除尾部的数据 shift():删除头部的数据 splice(from,howmany,items):添加删除数据。 From:从哪个下标开始添加还是删除 Howmany:删除或者添加几个数组元素 Items:添加的数据或者是修改的数据。 1.删除数组元素: 2.删除数组元素并替换数组元素 3.添加数组元素 四、数组的方法(重点) 4.1 数组的属性 4.1.1 length的
2020-11-10 10:14:37
148
原创 上海尚学堂-语言编程
主要内容: 学习目标: 节数 知识点 要求 第一节(数组的概念) 数组介绍 了解 第二节(数组的特点) length属性 了解 字符索引 了解 获取指定位置的字符 了解 字符串连接 了解 第三节(数组调用) 常见转义字符 掌握 第四节(数组的方法) 创建字符串对象 掌握 第六节(数组的实例) 字符串的使用 掌握 第五节(二维数组) 字符串方法 掌握 为什么使用数组? 问题引入 王大爷有6只乌龟,它们的体重分别是3kg,5kg,1kg, 3.4kg,2
2020-11-10 10:14:04
191
原创 java 编程-JS字符串
JS字符串 ## 引导 主要内容: 学习目标: 节数 知识点 要求 第一节(字符串概述) 字符串介绍 了解 第二节(字符串的使用) length属性 了解 字符索引 了解 获取指定位置的字符 了解 字符串连接 了解 第三节(转义字符) 常见转义字符 掌握 第四节(字符串对象) 创建字符串对象 掌握 第五节(字符串方法(重点)) 字符串方法 掌握 第六节(字符串实例) 字符串的使用 掌握 字符串概述 定义:字符串就是用单引号或者双引号包裹起来的,零个或
2020-11-10 10:13:17
140
原创 Java-语言编程
###主要内容: ###学习目标: 节数 知识点 要求 第一节(js的前世今生) js简介 了解 第二节(js的语法结构) 页面引入js的几种方式 了解 js输出的几种方式 了解 js的语法规则 了解 第三节(Javascript名词解释) 数字字面量 掌握 字符串字面量 掌握 常量 理解 第四节(Javascript变量命名规则(重点)) 声明变量 掌握 变量提升 掌握 变量的命名规则 了解 第五节(Javascript数据类型(重点))
2020-11-09 18:00:41
302
原创 java-语言编程
js的语法规则 1、分号是语句结束的标志,分号不是必须的,我们不建议这样做,严格来说,语句要加上分号。 2、 js会忽略多个空格和换行。 3、字符集 **utf-8:**统一国际编码,兼容各个国家的语言 gb2312/gbk:简体中文编码 big5:繁体中文编码 4、变量区分大小写 5、注释 回顾一下html注释: 回顾一下css的注释: /*内容*/ js的注释语句 单行注释://内容 多行注释:/*内容*/ 问:为什么要加注释? 答:为了方便别人也是为了方便自己。 Javascript名词解释 **在
2020-11-09 18:00:10
226
原创 上海上学堂-语言编程
引导 主要内容: 学习目标: 节数 知识点 要求 第一节(什么是语句) 语句是什么 了解 第二节(顺序语句) 顺序语句 了解 第三节(分支语句) 单分支语句 掌握 多分支语句 掌握 switch语句 理解 第四节(循环语句) while语句 掌握 for循环 掌握 do-while循环 了解 第五节(嵌套语句) if嵌套 掌握 循环嵌套 掌握 第六节(跳转语句) break语句 掌握 continue语句 掌握 什么是语句 语句:就
2020-11-09 17:59:30
262
原创 java-语言编程
实例方法:repeat() repeat方法返回一个新字符串,表示将原字符串重复n次。 'x'.repeat(3) // "xxx" 'hello'.repeat(2) // "hellohello" 'na'.repeat(0) // "" 参数如果是小数,会被取整。 'na'.repeat(2.9) // "nana" padStart(),padEnd() ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用
2020-11-05 17:40:02
201
原创 java-语言编程
实例方法:repeat() repeat方法返回一个新字符串,表示将原字符串重复n次。 'x'.repeat(3) // "xxx" 'hello'.repeat(2) // "hellohello" 'na'.repeat(0) // "" 参数如果是小数,会被取整。 'na'.repeat(2.9) // "nana" padStart(),padEnd() ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用
2020-11-05 17:37:35
119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅