LDC

阿里双11技术详解:容量规划+LDC+弹性架构+大促中控等

别说谁变了你拦得住时间么 提交于 2020-11-12 11:47:30
每一年的双十一都是新技术的演练场,对于技术人员来说,维持双11全天24小时稳定流畅固然不易,但最为考验的时刻当属零点刚过,大家操起手机,刷新早已存好的购物车,点击支付的那一刻! 11年,零点越来越平滑的双11购物背后,支付宝有过哪些不为人知的技术探索。本篇文章原文作者为蚂蚁金服科技。、 # 快速领取通道:( 点这里 )免费获取!诚意满满!!! Java面试精选题、架构实战文档传送门: https://jq.qq.com/?_wv=1027&k=iWJZw1rp 正文: 和过去10年一样,2019年天猫双11又创造了一个全新的纪录。 这个数字背后,是数代支付宝工程师们殚精竭虑、不断突破技术难关。 从外部瓶颈说起 从外部瓶颈说起 事情从一开始就显得不是很顺利。 2011年的双十一,在高峰时期少数用户无法付款,经过调查发现,这是因为少数银行的网银系统在压力下出现故障。早年的支付宝交易,用户点击支付后需要从支付宝和银行的接口去付款,而早年这个接口的性能很差,每秒只能支持几十到上百笔交易,稳定性也比较差,一旦流量上来,容易发生故障。 如果不解决这个问题,今后的每次大促都会出现无法付款的情况,极大影响用户体验。但是,这个问题单靠技术是很难解决的,银行对网银系统的演进有自己的规划,支付宝无法去干涉它们的系统。 不过,聪明的运营人员想出了一个变通的办法。在2012年的双十一

C#9.0 终于来了,您还学的动吗? 带上VS一起解读吧!

China☆狼群 提交于 2020-10-27 17:45:53
一:背景 1. 讲故事 好消息, .NET 5.0 终于在2020年6月10日发布了第五个预览版,眼尖的同学一定看到了在这个版本中终于支持了 C# 9.0 ,此处有掌声,太好了!!! .Net5官方链接 可以看到目前的C#9还是预览版,实现了一部分新语法供开发者提前尝鲜,从github的roslyn仓库上可以看到目前准备实现 17 个新特性,现阶段已经实现了 8 个,其中的 In Progress 表示正在开发中。 新特性预览 2. 安装必备 下载最新的 net5 sdk 吧: dotnet-sdk-5.0.100-preview.5.20279.10-win-x64.exe 下载最新的 visual studio 2019 preview 2 找好你自己的vs版本类型哦。。。 二:新特性研究 1. Target-typed new 这个取名一定要留给学易经的大师傅,没见过世面的我不敢造次,取得不佳影响时运,所谓 运去金成铁, 时来铁似金 ,不过大概意思就是说直接new你定义的局部变量的类型,用 issues 中总结的话就是: Summary: Allow Point p = new (x, y); Shipped in preview in 16.7p1. 接下来就是全部代码,看看 使用前 和 使用后 的具体差别。 class Program { static void Main

探索JVM的底层秘密(一)——如何正确理解Java的常量池

断了今生、忘了曾经 提交于 2020-10-23 15:52:38
如果你点开了本篇文章,那么恭喜你发现宝藏了! 博主接下来将会更新整个系列的 《探索JVM的底层秘密》 文章,为大家完整的剖析JVM的底层原理。 作者最近在优化JVM内存模型这方面的内容,发现自己对于Java中的常量池的理解有点零碎,做个总结,于是就有了这篇文章。本篇文章所有知识点基于jdk8。 jdk6、jdk7不适用,如果有疑问,欢迎在评论区留言。废话不多说,直接上代码。 比如你写了一段这样的Java代码,JVM是如何处理的呢? 1、Java代码 public class StringTest2 { String name = "子牙" ; public static void main ( String [ ] args ) { StringTest2 obj = new StringTest2 ( ) ; } } 2、class文件之常量池(图1) 3、默认构造方法字节码(图2) 常量池分类 1、class文件中的常量池 这个常量池中主要存放两大类常量:字面量、符号引用。 字面量即文本字符串,如index=10的Code、index=11的LineNumberTable……还有声明为final的常量。 符号引用则属于编译原理方面的概念,包含三类: 类和接口的全限定名,如index=4存放的是CONSTANT_Class_info结构,指向的是类的全限定名 字段的名称和描述符

Java 中 String 对 null 对象的容错处理!

十年热恋 提交于 2020-10-14 23:04:38
作者:肖汉松 blog.xiaohansong.com/2016/03/13/null-in-java-string/ 最近在读《Thinking in Java》,看到这样一段话: _Primitives that are fields in a class are automatically initialized to zero, as noted in the Everything Is an Object chapter. _ _But the object references are initialized to null, and if you try to call methods for any of them, you’ll get an exception-a runtime error. _ Conveniently, you can still print a null reference without throwing an exception. 大意是:原生类型会被自动初始化为 0,但是对象引用会被初始化为 null,如果你尝试调用该对象的方法,就会抛出空指针异常。通常,你可以打印一个 null 对象而不会抛出异常。 第一句相信大家都会容易理解,这是类型初始化的基础知识,但是第二句就让我很疑惑:为什么打印一个 null 对象不会抛出异常

工作10年后,再看String s = new String("xyz") 创建了几个对象?

限于喜欢 提交于 2020-09-26 12:04:50
这个问题相信每个学习java的同学都不陌生,作为一个经典的面试题,到现在工作这么多年了我真是认为挺操蛋的一个问题,在网上到现在你仍然可以看见很多讨论这个问题的人,其中不乏工作很多年的人都有争论,我认为还是有必要来说一说这个问题的。 从方法区说起 常量池存在于方法区,而方法区在jdk1.7版本前后改变比较大,所以还是先来说说方法区的演变。 在jdk1.7版本之前,常量池存在于方法区,方法区是堆的一个逻辑部分,他有一个名字叫做 非堆 。 1.7版本把字符串常量池放到了堆中。 而在1.8以后,则是移除了永久代,方法区概念保留,方法区的实现改为了元空间,常量池还是在堆中。 为什么要说方法区的改变,只是为了文章接下来的内容不会由于JDK的版本而产生分歧,接下来内容都会以jdk1.8版本作为基础来讨论。 String s = new String("xyz"); 先来一段代码 public class Test { public static void main(String[] args) { String s = "xyz"; } } 接着我们javac编译代码,然后用javap来反编译,执行javap -c Test 从结果来看,ldc命令 在常量池中创建了一个"xyz"的对象,然后把他推至操作数栈顶 ,然后astore保存到局部变量,return返回。 接着看第二段面试题中的代码

虚拟机字节码指令表

安稳与你 提交于 2020-08-19 05:34:56
虚拟机字节码指令表收藏学习备用 字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型3推送至栈顶 0x07 iconst_4 将int型4推送至栈顶 0x08 iconst_5 将int型5推送至栈顶 0x09 lconst_0 将long型0推送至栈顶 0x0a lconst_1 将long型1推送至栈顶 0x0b fconst_0 将float型0推送至栈顶 0x0c fconst_1 将float型1推送至栈顶 0x0d fconst_2 将float型2推送至栈顶 0x0e dconst_0 将double型0推送至栈顶 0x0f dconst_1 将double型1推送至栈顶 0x10 bipush 将单字节的常量值(-128~127)推送至栈顶 0x11 sipush 将一个短整型常量值(-32768~32767)推送至栈顶 0x12 ldc 将int, float或String型常量值从常量池中推送至栈顶 0x13 ldc_w 将int,

图到文本生成中的结构信息保持

空扰寡人 提交于 2020-08-19 01:05:34
本论文由腾讯 AI Lab 主导,和厦门大学、西湖大学合作完成。作者提出基于“多视角重建”的损失函数提升文本生成的质量和忠实度,与此同时并没有增加任何模型参数。 Structural Information Preserving for Graph-to-Text Generation 图到文本生成(graph-to-text generation)任务有着广泛的潜在应用,并且已经被应用在机器翻译等任务中。下图显示了两种图结构(语义图和知识图谱),分别表示“The boy wants the beautiful girl to eat lunch with him.”和“Above the Veil is an Australian novel and the sequel to Aenir. It was followed by Into the Battle.” 现有的该领域工作不断的提出更强大的模型来表示图信息,但模型依然是通过拟合到目标文本的基于语言模型(language modeling loss)的损失函数进行训练的,作为结果,模型会产生流畅的输出,但会丢失许多输入的重要信息。 本文提出了一种通用的基于“多视角重建”的损失函数来辅助模型训练。总的来说,我们提出了多种方法把输入的图投射到目标句子端,让解码器不仅学习输出目标句子,还要输出投射的图结构

Java ByteCode

核能气质少年 提交于 2020-08-17 03:33:10
首先创建java文件 Testdemo.java public class Testdemo { private String text = "hello world"; public Testdemo() { } public static void main(String[] args) { System.out.print("hello world"); } } 编译 javac Testdemo.java 生成class文件 Testdemo.class 查看class 文件 打开文件 vim Testdemo.class ,然后 输入:%!xxd 就是以16进制显示class文件了,内容如下 00000000: cafe babe 0000 0034 0011 0a00 0400 0d08 .......4........ 00000010: 000e 0700 0f07 0010 0100 063c 696e 6974 ...........<init 00000020: 3e01 0003 2829 5601 0004 436f 6465 0100 >...()V...Code.. 00000030: 0f4c 696e 654e 756d 6265 7254 6162 6c65 .LineNumberTable 00000040: 0100 046d 6169

java.lang.String 的 + 号操作到底做了什么?

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-15 04:45:28
作者:丶Pz https://www.cnblogs.com/panzi/p/11956782.html 在之前的面试经历中,对于 String 的考察还是挺频繁的,大致考察以下几个知识点: String 常量池 new String() == 和 equals 的区别 native 方法 String.intern() 虽然面试中大体答对了,但是今天早上微信群里的一个问题我却答不上来,这个问题是这样的: String str3 = "what"; String str4 = str3 + " a nice day"; //运行时, + 相当于 new,所以堆中会有 "what a nice day"对象,常量池中会有"what"," a nice day"两个对象,而不会有 "what a nice day"对象。 //这句话大佬们看看对不对啊,我怎么感觉不对啊 //常量池不会有"what a nice day" 对象吗? 看完这个问题,说实话我也是有点懵的,我只是知道 "what a nice day"不会在常量池,但是不知道具体的原因,后来群里的同学说 + 号是调用了 StringBuffer 的append 方法。 我去证实了,发现确实调用了 append 方法,但是当时没有 调用toString()方法,我很疑惑。(最后经过证实,是 StringBuilder

NetCore实现Transitional自定义注解事物

不羁岁月 提交于 2020-08-12 20:39:20
之前实现了 NetCore实现自定义IOC容器注入 ,在Controller使用事物的过程中思考是否能够像Spring一样通过自定义注解实现事物管理,思路图如下 事物的动作拆分只需要根据当前执行线程划分Connection对象并开启事物即可,重点是在Emit代码织入过程中对异常捕捉的处理 处理过程中主要会用到BeginExceptionBlock开启try代码块,BeginCatchBlock开启catch代码块,EndExceptionBlock结束异常捕捉代码块 创建事物注解Transitional用来标记Controller中需要事物执行的方法 [AttributeUsage(AttributeTargets.Method)] public class Transitional : System.Attribute { public bool AutoRollBack { set ; get ; } public Transitional() { AutoRollBack = true ; } } Emit编织时需要注意异常捕捉时有返回值时建立全局变量返回,执行事物管理器类的静态方法直接使用call,例如 ilOfMethod.Emit(OpCodes.Call, typeof(TransitionManage).GetMethod("DoRollBack"))