1 Java小天才

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 35w+

基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办

kk-anti-reptile是,适用于基于spring-boot开发的分布式系统的反爬虫组件。一、系统要求基于spring-boot开发(spring-boot1.x, spring-boot2.x均可) 需要使用redis二、工作流程kk-anti-reptile使用基于Servlet规范的的Filter对请求进行过滤,在其内部通过spring-boot的扩展点机制,实例化一个Filter,并注入到Spring容器FilterRegistrationBean中,通过Spring注入到Se

2020-06-02 15:31:50

写那么多年Java,还不知道啥是Java agent 的必须看一下

引言在本篇文章中,我会通过几个简单的程序来说明 agent 的使用,最后在实战环节我会通过 asm 字节码框架来实现一个小工具,用于在程序运行中采集指定方法的参数和返回值。有关 asm 字节码的内容不是本文的重点,不会过多的阐述,不明白的同学可以自己 google 下。简介Java agent 提供了一种在加载字节码时,对字节码进行修改的方式。他共有两种方式执行,一种是在 main 方法执行之前,通过 premain 来实现,另一种是在程序运行中,通过 attach api 来实现。在介绍

2020-06-01 16:37:45

JVM:怎么判断对象已经死了?

GC的历史比Java还有久远,我们在思考GC时候需要思考三个问题:哪些内存需要回收?什么时候回收?如何回收?在Java中程序计数器、虚拟机栈、本地方法栈这三个区域随线程而生,随线程而灭:栈中的栈帧随着方法的调用和退出而有条不紊的进行着入栈和出栈的过程。每个栈帧分配多少内存在类结构确定下来时就已知了,方法结束或者线程结束内存自然跟着回收了。而Java堆和方法区不一样,一个接口中的多个实现类的内存可能不一样,每个方法的多个分支需要的内存也可能不一样,我们只有在程序运行时候才知道会创建..

2020-05-29 19:39:47

为什么阿里巴巴禁止使用存储过程?

之所以有这个题目,我既不是故意吸引眼球,也不想在本文对存储过程进行教科书般论述。《阿里巴巴Java开发手册》是这样规定的:再结合我最近项目中遇到的存储过程问题,所以今天我打算来聊一聊这个问题。这事儿要从去年在武汉出差时一位同事的发问说起,问题是这样的:我觉得存储过程挺好用的,你为什么不建议用呢当时我好似胸有万言,但终究没用一个实在的例子回答同事,只是从结论上大侃一通,代码相对于SQL,复用、扩展、通用性都要更强。想必同事并不信服。现在想来,我最近正碰到的问题,算是一个可以回答同事..

2020-05-27 20:08:36

干货:使用 Javassist 对字节码操作为 JBoss 实现动态AOP框架

Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。Javassist的官方网站:http://jboss-javassist.github.io/javassist/通过javasssit,我们可以:动态创建新类或新接口的二进制字节码 动态扩展现有类或接口的二进制字节

2020-05-27 16:54:34

阿里工程师告诉你,怎样用Kafka实现数字孪生的物联网架构

数字孪生(Digital Twin)可以被理解为现实中某些事物(也包括过程或服务)在数字虚拟环境中的表现。在本文中,你将了解到数字孪生在各个行业中所处的优势,以及Apache Kafka、物联网架构和机器学习之间的关系。在实际应用中,Kafka通常被用作中央事件流平台,以那些实时流传感器的数据,构建可靠、且可扩展的数字孪生和数字线程。我们将从如下三个方面来讨论如何构建开放、且可扩展的数字孪生基础架构:数字孪生与数字线程。 事件流、数字孪生与AI(机器学习)之间的关系。 使用Apache Kafk

2020-05-26 20:38:07

如何设计一个安全的对外接口?

前言最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些安全措施以及具体如何去实现。安全措施个人觉得安全措施大体来看主要在两个方面:一方面就是如何保证数据在传输过程中的安全性; 另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。1.数据加密我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加

2020-05-18 16:25:02

面试官:为什么 Spring Boot 的 jar 可以直接运行?

Spring Boot Loader抽象的一些类 JarLauncher的执行过程 关于自定义的类加载器LaunchedURLClassLoader Spring Boot Loader的作用SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行的jar包。在pom文件里加入这个插件即可:<build> <plugins> <plugin> <g.

2020-05-15 21:03:18

被裁员后:三个月含泪啃完了1111道面试解析,再入职腾讯年薪45万

一个小伙伴最近参加某一线互联网公司的面试,被问到了一些并发相关的问题,看看大家能否答出来:(1)synchronized的CPU原语级别是如何实现的?(2)无锁、偏向锁、轻量级锁、重量级锁有什么差别,升级过程如何?(3)线程间通信,同机器进程间通信,跨机器进程间通信,各有什么方法?(4)下列三种业务,应该如何使用线程池: 高并发、任务执行时间短的业务 并发不高、任务执行时间长的业务 并发高、业务执行时间长的业务 (5)秒杀系统,如何能够撑住100W级别TPS..

2020-05-14 15:01:16

面试必问:如何检测并避免 Java 中的死锁?

经典但核心Java面试问题之一。如果你没有参与过多线程并发 Java 应用程序的编码,你可能会失败。如何避免 Java 线程死锁?这是Java面试的热门问题之一, 也是多线程的编程中的重口味之一, 主要在招高级程序员时容易被问到, 且有很多后续问题。尽管问题看起来非常基本, 但大多数 Java 开发人员一旦你开始深入, 就会陷入困境。面试问题总是以“什么是死锁?”开始当两个或多个线程在等待彼此释放所需的资源(锁定)并陷入无限等待即是死锁。它仅在多任务或多线程的情况下发生。如何检测

2020-05-13 21:23:31

因用了Insert into select语句,同事被开除了!

某天 xxx 接到一个需求,需要将表 A 的数据迁移到表 B 中去做一个备份。他本想通过程序先查询查出来然后批量插入,但 xxx 觉得这样有点慢,需要耗费大量的网络 I/O,决定采取别的方法进行实现。通过在某度的海洋里遨游,他发现了可以使用 insert into select 实现,这样就可以避免使用网络 I/O,直接使用 SQL 依靠数据库 I/O 完成,这样简直不要太棒,然后他就被开除了。事故发生的经过由于数据数据库中 order_today 数据量过大,当时好像有 700W 了,并且每天

2020-05-12 16:17:01

如何优雅地中止线程?

错误的线程中止 - stop首先来讲解一个错误的方式来中止线程 —stop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK 不建议使用,类似的方法还有 destory,由于 JDK 从未实现该方法,在这里就不介绍了。接下来通过一段程序来讲解为什么stop会导致线程安全问题?首先定义一个线程类StopThread:public class StopThread extends Thread { private int i = 0; private ...

2020-05-11 16:29:57

很全的Tomcat实战调优方案,提升性能必备

Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力。提高Tomcat的性能可以分为两个方向。服务器资源服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能牛B,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomca...

2020-05-08 17:16:50

百度资深架构师详谈:缓存雪崩,缓存穿透,缓存击穿

缓存雪崩出现过程:假设有如下一个系统,高峰期请求为5000次/秒,4000次走了缓存,只有1000次落到了数据库上,数据库每秒1000的并发是一个正常的指标,完全可以正常工作,但如果缓存宕机了,或者缓存设置了相同的过期时间,导致缓存在同一时刻同时失效,每秒5000次的请求会全部落到数据库上,数据库立马就死掉了,因为数据库一秒最多抗2000个请求,如果DBA重启数据库,立马又会被新的请求...

2020-05-07 20:48:24

Tomcat 是如何管理Session的?

概述学了ConcurrentHashMap却不知如何应用?用了Tomcat的Session却不知其是如何实现的,Session是怎么被创建和销毁的?往下看你就知道了。Session结构不多废话,直接上图仔细观察上图,我们可以得出以下结论HttpSession是JavaEE标准中操作Session的接口类,因此我们实际上操作的是StandardSessionFacade...

2020-05-07 18:26:51

分布式限流学不动了?我教你

一、限流在高并发系统中,需要使用多种方式来保护系统,例如:缓存,目的是提升系统访问速度,增大系统处理能力。降级,当服务器压力剧增的时候,根据实际业务情况,对某些服务或者页面有策略的不处理或者简单处理,从而释放服务器资源,以保证核心业务正常运行,通过牺牲局部利益来保证全局利益。限流,目的是通过对请求进行限速来保护系统,如果达到限速值就可以采取一定的手段,例如拒绝服务、排队、等待。所以...

2020-05-06 17:18:48

阿里大牛手把手教你,如何解决Redis并发竞争key问题!

1.问题描述并发竞争key这个问题简单讲就是:同时有多个客户端去set一个key。示例场景 1例如有多个请求一起去对某个商品减库存,通常操作流程是:取出当前库存值计算新库存值写入新库存值假设当前库存值为 20,现在有2个连接都要减 5,结果库存值应该是 10 才对,但存在下面这种情况:示例场景 2比如有3个请求有序的修改某个key,按正常顺序的话,数据版本应该是 1...

2020-05-06 16:57:42

分布式事务方案 - TCC

TCC是支付宝提出的分布式事务解决方案,是 try、confirm、cancel 的缩写。与2PC二阶段提交机制类似,区别在于层面不同,2PC是在数据库层面解决数据库之间的分布式事务,TCC是在应用层面解决分布式系统中的分布式事务。工作流程每个分布式事务的参与者都需要实现3个接口:try、confirm、cancel(confirm 对应2PC的事务提交,cancel 对应2PC的事务回滚)...

2020-05-04 22:23:58

初探Tomcat的架构设计

Tomcat 作为 servlet 容器实现,它是基于 Java 语言开发的轻量级应用服务器。因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前Java 开发应用部署的首选,几乎每个Java Web开发者都有使用过,但是,你对 Tomcat 的整体设计有进行过了解和思考吗?本文将基于 Tomcat8 进行分析,具体版本为 Tomcat8 当前官...

2020-04-30 20:34:06

想自己动手实现一个 RPC 框架?不妨参考这个思路试试(动态代理与RPC)

前言随着最近关注 cim 项目的人越发增多,导致提的问题以及 Bug 也在增加,在修复问题的过程中难免代码洁癖又上来了。看着一两年前写的东西总是怀疑这真的是出自自己手里嘛?有些地方实在忍不住了便开始了漫漫重构之路。前后对比在开始之前先简单介绍一下 cim 这个项目,下面是它的架构图:简单来说就是一个 IM 即时通讯系统,主要有以下部分组成:IM-server 自然就是服务端了,用于...

2020-04-29 20:36:22

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。