首页
学习
活动
专区
工具
TVP
发布

架构之路

专栏成员
74
文章
148951
阅读量
43
订阅数
追源索骥:透过源码看懂Flink核心框架的执行流程
写在最前:因为这篇博客太长,所以我把它转成了带书签的pdf格式,看起来更方便一点。想要的童鞋可以到我的公众号“老白讲互联网”后台留言flink即可获取。
老白
2018-08-01
10.1K4
spark 2.3 导致driver OOM的一个SparkPlanGraphWrapper源码的bug
长话短说,我们部门一个同事找到我,说他的spark 2.3 structured streaming程序频繁报OOM,从来没有坚持过超过三四天的,叫帮看一下。 这种事情一般我是不愿意看的,因为大部分情况下spark oom就那么几种可能:
老白
2018-08-01
8060
高并发请求的缓存设计策略
前几天,我司出了个篓子。当时正值某喜闻乐见的关键比赛结束,一堆人打开我司app准备看点东西,结果从来没有感受到过这么多关注量的该功能瞬间幸福到眩晕,触发了熔断,结果就是大量兴致冲冲打开app准备看该比赛结果的人被迫刷了十分钟三天前的野外跑酷,负责内容的人火大到直接骂娘。
老白
2018-08-01
8930
从Java继承类的重名static函数浅谈解析调用与分派
今天被实习生问了这么个问题: 在java中,static成员函数是否可以被重写呢?
老白
2018-08-01
1.2K0
谁还没遇上过NoClassDefFoundError咋地——浅谈字节码生成与热部署
谁还没遇上过NoClassDefFoundError咋地——浅谈字节码生成与热部署 ---- 前言 在Java程序员的世界里,NoClassDefFoundError是一类相当令人厌恶的错误,因为这类错误通常非常隐蔽,难以调试。 通常,NoClassDefFoundError被认为是运行时类加载器无法在classpath下找不到需要的类,而该类在编译时是存在的,这就通常预示着一些很麻烦的情况,例如: 不同版本的包冲突。这是最最最常见的情况,尤其常见于用户代码需要运行于容器中,而本地容器和线上容器版本不同时
老白
2018-07-06
9670
HTML5 自定义属性 data-* 和 jQuery.data 详解
新的HTML5标准允许你在普通的元素标签里,嵌入类似data-*的属性,来实现一些简单数据的存取。它的数量不受限制,并且也能由javascript动态修改,也支持CSS选择器进行样式设置。这使得data属性特别灵活,也非常强大。有了这样的属性我们能够更加有序直观的进行数据预设或存储。下面介绍HTML5 Dataset 存储的实际应用,以及包括jQuery在内的四种存取方式。 HTML5 Dataset 存储的例子 为一个元素分配data属性存储数据,例如这是一个span元素,它的内容是一首音乐的名称,我们为
老白
2018-03-19
1.5K0
IdentityHashMap的使用场景
IdentityHashMap的使用场景 JDK1.4就加入了这个map类型,它是使用 == 判断相等,而不是hashmap的equals方法判断相等。 那么,它有什么应用场合呢? 当然是需要我们必须使用地址相等来判断值相等的场合,以及我们确定只要其地址不相等,则其equals方法的结果也必定不相等的场合。 例如:ThreadLocal类 这个类的原理是根据thread从其内部map中获取线程独立的值,那么,我们使用只判断相等的IdentityHashMap,就会比用HashMap要快些。 然而,当我去看T
老白
2018-03-19
2K0
Spring AOP中 args和arg-names的区别
这两天在看aop aspectj的各种语法,发现里面有两个概念 args和arg-names很容易混淆,网上也基本没说清楚,所以就动手试了一下,发现还是自己试试比较好理解 先说结论: args是和execution用在一起,用来过滤要被代理的方法的,如果不和arg-names一起用,那么用法是args(类名,类名...)。 如果和arg-names(参数名1,参数名2...)一起用,那么用法是args(参数1,参数2...),其中,参数1和参数2的类型由arg-names所代表的方法的参数确定 arg-na
老白
2018-03-19
1.7K0
SpringMVC + Mybatis bug调试 SQL正确,查数据库却返回NULL
今天碰到个bug,有点意思 背景是SpringMVC + Mybatis的一个项目,mapper文件里写了一条sql 大概相当于 select a from tableA where b = "123" 这样的级别 然后不管传进去的是什么 数据库里有没有 都会返回null ---- 第一反应是sql语句写错了,比如把1和小写L弄混了之类的,传给sql的参数里有奇怪的空格等等 于是打开debug log 拿到传给sql的preparedStatement 和对应的参数 复制到console里自己查了一下,可以
老白
2018-03-19
1.4K0
JavaScript的三种类型检测typeof , instanceof , toString比较
1.typeof typeof是js的一个操作符,在类型检测中,几乎没有任何用处。 typeof 返回一个表达式的数据类型的字符串,返回结果为javascript中的基本数据类型,包括:number、boolean、string、object、undefined、function等6种数据类型。 也就是说,typeof只能返回这几种类型,而对于我们的自定义对象,它只会返回object,在实际应用中作用约等于零。 此外,typeof在不同浏览器中可能存在一些兼容性的问题,如将function类型认作是obje
老白
2018-03-19
1.7K0
Spring 数据库连接(Connection)绑定线程(Thread)的实现
最近在看spring事务的时候在想一个问题:spring中的很多bean都是单例的,是非状态的,而数据库连接是一种有状态的对象,所以spring一定在创建出connection之后在threadlocal中保存了它。今天正好有空,就看了一下源码: /** * Bind the given resource for the given key to the current thread. * @param key the key to bind the value to (usua
老白
2018-03-19
1.8K0
Java 中冷门的 synthetic 关键字原理解读
看JAVA的反射时,看到有个synthetic ,还有一个方法isSynthetic() 很好奇,就了解了一下: 1.定义 Any constructs introduced by a Java compiler that do not have a corresponding construct in the source code must be marked as synthetic, except for default constructors, the class initialization
老白
2018-03-19
3K0
idea 远程调试 tomcat web应用
最近在做的一个东西,测试环境和本地环境差距太大,本地能运行的代码,放到测试环境上到处报错,哪里哪里都连不上,所以决定把代码部署到远程服务器上调试,节省时间。 网上看了很多教程,大部分都是互相抄来抄去,照做了也调不通,所以决定把自己的步骤发上来,但是不会对这些步骤作详细解释,需要明白原理的童鞋请自行百度... ---- 远程环境:debian 7 ,tomcat7 , jdk1.8 本地:win7,tomcat7,jdk1.8,idea2017 默认jdk均已安装好。 1.远程tomcat配置: 部署在/ho
老白
2018-03-19
1.7K0
一次线上tomcat应用请求阻塞的排查经过
今天早上,收到一个报警,有个服务器的http往返时延飙升,同时曝出大量404,很是折腾了一番,特记录下思考和排查经过。 1.这是单纯的时延增大,还是有什么其他情况还未掌握? 因为不知道是只有时延变大而已,还是同时有别的情况,第一反应是先看日志有没有异常。 看了一下,一片风平浪静,既是好消息也是坏消息。好消息是核心业务还在,不然一定会打日志,坏消息是日志提供不了任何信息。当然这也说明了我们的日志肯定有不到位的地方。 2.换个思路,日志风平浪静,是否只是服务器启动了什么任务,占用了大量cpu/IO等?GC呢?
老白
2018-03-19
3K0
高并发场景下的httpClient优化使用
1.背景 我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里。 先对比前后:优化之前,平均执行时间是250ms;优化之后,平均执行时间是80ms,降低了三分之二的消耗,容器不再动不动就报警线程耗尽了,清爽~ 2.分析 项目的原实现比较粗略,就是每次请求时初始化一个httpclient,生成一个httpPost对象,执行,然后从返回结果取出entity,保存成一个字符串,最后显
老白
2018-03-19
6.8K0
悲观锁&乐观锁
最近意外发现之前对悲观锁乐观锁的理解有误,所以重新学习了一下。 1.悲观锁 悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。 使用场景举例:以MySQL InnoDB为例 商品goods表中有一个字段status
老白
2018-03-19
1K0
mysql 通过慢查询日志查写得慢的sql语句
MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL 。   慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看SQL 的执
老白
2018-03-19
1.4K0
wait方法和sleep方法的区别
一.概念、原理、区别 Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡。抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行。        当有多个线程访问共享数据的时候,就需要对线程进行同步。线程中的几个主要方法的比较:        Thread类的方法:sleep(),yield()等        Object的方法:wait()和notify()等 每个对象都有一个机锁来控制同步访问。Synchronized关键字可以和对象的机
老白
2018-03-19
1K0
不用synchronized块的话如何实现一个原子的i++?
上周被问到这个问题,没想出来,后来提示说concurrent包里的原子类。回来学习一下。 一、何谓Atomic?  Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成)  在x86 平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HL
老白
2018-03-19
9760
redis AOF保存机制
网上说AOF有三种保存方式,不自动保存、每秒自动保存、每命令自动保存。 其中每秒自动保存这个看起来很美好,但是可能会被各种IO的时间所延迟,所以究竟是怎么判断每秒保存的,并不是太明白,故有此文。 AOF 命令同步 Redis 将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件, 以此达到记录数据库状态的目的, 为了方便起见, 我们称呼这种记录过程为同步。 举个例子, 如果执行以下命令: redis> RPUSH list 1 2 3 4 (integer) 4 redis> LRANGE l
老白
2018-03-19
9270
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档