- 博客(19)
- 收藏
- 关注
原创 分布式事务的思路
在一些项目中,有时会遇到关于分布式事务的场景,关于分布式事务它有很多的问题与思路。比如电商平台中关于商品的支付业务中:1.用户在电商平台选择商品,下订单选择支付平台。2.在支付平台请求支付平台,选择支付方式,进行支付。3.请求银行,创建支付交易并扣款。4.银行会返回扣款结果,成功或是失败。5.支付平台向电商平台返回支付结果。6.电商平台返回结果给用户。在上面的整个业务流转过程中,只...
2019-01-07 17:30:40
309
原创 TypeError: Cannot Read Property ‘length’
这是 Chrome 中发生的错误,因为读取了未定义长度属性的变量。通常在数组中能够找到定义的长度,但是如果数组未初始化或变量名在另一个上下文中隐藏,则可能会出现这种错误。让我们用下面的例子来解释这种错误。当用参数声明一个函数时,这些参数会成为本地参数。这意味着即使你有名称变量 testArray,函数中具有相同名称的参数仍会被视为本地参数。有两种方法可以解决这个问题:删除函数声明语句...
2018-10-27 16:29:17
1657
原创 Uncaught RangeError: Maximum Call Stack
这是在很多种情况,Chrome 中发生的错误,一种情况是当你调用一个不会终止的递归函数时。如果将值传递给超出范围的函数,也可能会发生这种情况。许多函数只接受特定范围内的数字输入值。例如,Number.toExponential( digits ) 与 Number.toFixed( digits) 接受的参数范围为从0到20,而 Number.toPrecision( digits ) 接受的数...
2018-10-27 16:18:13
307
原创 TypeError: ‘undefined’ Is Not a Function
当调用未定义的函数时,Chrome 中就会发生这样的错误。随着 JavaScript 编码技术和设计模式在过去几年中变得越来越复杂,回调和闭包中的自引用范围也相应增加,这是造成这种混乱现象的主要来源。正如下面的示例代码片段:执行上面的代码会导致以下错误:“Uncaught TypeError: undefined is not a function。” 发生以上错误的原因是,当你调用 s...
2018-10-27 16:07:32
14840
原创 TypeError: Object Doesn’t Support Property
当调用未定义的方法时,IE 中会发生这样的错误。这相当于 Chrome 中的 “undefined’ is not a function” 错误。对于相同的逻辑错误,不同的浏览器可能会有不同的错误消息。这是在 IE 的 Web 应用程序中使用 JavaScript 命名空间出现的一个常见问题。出现这种情况的绝大部分原因是IE无法将当前名称空间内的方法绑定到this关键字。例如,如果你有 JS ...
2018-10-27 16:04:08
2262
原创 (unknown): Script Error
当未捕获的 JavaScript 错误违背跨边界原则时,就会发生脚本错误。例如,如果将 JavaScript 代码托管在 CDN 上,则任何未被捕获的错误(通过 window.onerror 处理程序发出的错误,而不是 try-catch 中捕获到的错误)将仅报告为“脚本错误”。这是浏览器的一种安全措施,主要用于防止跨域传递数据的情况出现。要获取真实的错误消息,需要执行以下操作:Access-...
2018-10-27 16:01:08
404
原创 TypeError: Null Is Not an Object (evaluating...)
这是在 Safari 中读取属性或调用空对象上的方法时发生的错误。在 JavaScript 中,null 和 undefined 是两种不同的类型,这就是为什么会出现两个不同的错误消息。未定义通常是一个尚未分配的变量,而 null 则表示该值为空。要验证它们不相等,请使用严格的相等运算符:在实际情况中,导致这种错误的原因之一是:在元素加载之前,就尝试在 JavaScript 中使用 DOM 元...
2018-10-27 15:54:52
50726
1
原创 Uncaught TypeError: Cannot Read Property
这是 JavaScript 开发人员最常遇到的错误。当你读取一个属性或调用一个未定义对象的方法时,Chrome 中就会报出这样的错误。导致这个错误发生的原因有很多,常见的一种情况是在渲染 UI 组件时,不正确地初始化状态。我们来看一个真实的应用程序中发生这种情况的例子。以上代码有两个重要方面:一是组件的状态(例如 this.state),在开始生命周期之前是 undefined 状态。二是...
2018-10-27 15:51:33
4549
原创 Java 内存溢出排查
Java OOM 毫无疑问是开发人员常见并且及其痛恨的问题,但是任何服务的开发都没法避免 OOM。 因此,OOM 的排查及定位是每个 Java 工程师都必备的技能。所遇到的问题在使用 scala 开发的一个 web 服务,在用户使用中,经常出现: java.lang.OutOfMemoryError: Java heap space 。而且还束手无策,每次都只能重启服务解决。准备服务使用 ...
2018-10-23 20:24:17
913
原创 Java 内存模型
在多核时代,如何提高CPU的性能成为了一个永恒的话题,而这个话题的讨论主要就是如何定义一个高性能的内存模型,内存模型用于定义处理器的各层缓存与共享内存的同步机制及线程和内存交互的规则。Java的世界也有属于它自己的内存模型,Java内存模型,即Java Memory Model,简称JMM。由于Java被定义成一种跨平台的语言,所以在内存的描述上面也要能是跨平台的,Java虚拟机试图定义一种统一...
2018-10-23 20:06:04
165
原创 关于Java调用本地方法
JNIJNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少量汇编编写,在执行Java字节码时如果遇到有某个方法标明为Native的则从JVM中找到对应的C/C++函数,一般本地方法对应的函数会被注册到JVM中。使用JNI能让Java与本地语言交互,但一般也...
2018-10-23 20:02:36
1317
原创 JVM层对jar包字节码加密
githubhttps://github.com/sea-boat/ByteCodeEncrypt需求拿到的需求是要对某特定的jar包实现加密保护,jar包需要提供给外部使用,但核心逻辑部分需要保护以免被简单反编译即能看到。几个思路大致想到以下几种方式:混淆器,将jar包混淆后反编译出来的东西看起来就很眼花,但如果耐心一点也是可以看出来的。对jar包进行加密,然后在Java层重写类加...
2018-10-23 19:58:39
351
原创 java内置注解的原理
Java内置的注解以及自定义一个注解大家都比较熟悉的了,现在来看看注解实现的原理,看看Java的体系下面是如何对注解的支持的。在讨论前先看一个自定义注解的例子,自定义实现这样一个注解:通过@Test向某类注入一个字符串,通过@TestMethod向某个方法注入一个字符串。① 创建Test注解,声明作用于类并保留到运行时,默认值为default。@Target({ElementType.TYP...
2018-10-23 19:54:46
270
原创 SpringBoot项目如何让前端开发提高效率?
本篇文章涉及的知识点有:Swagger 为了文档Nginx 为了效率众所周知, java项目的启动速度就像沙子里走路。要是你的前端模块也很大,有一大堆 node_modules, SpringBoot会毫不犹豫的给你打包进去。每次修改前端页面,都需要打包才能调试,真是等的媳妇都跑了。可惜的是, vue、 angular等当道,每一个都又大又肥,苦也。Swaggerswagger除了调试用...
2018-10-23 19:48:38
1977
原创 jvm堆内存溢出后,其他线程是否可继续工作
直接实验验证日志输入:从日志可以看出在thead-0发生OOM之后,thread-1仍旧能够继续申请内存工作。使用jconsole监控发现,thread-0开始慢慢把heap压满,发生OOM之后神奇的事情发生了,heap基本上被清空了,通过查看jconsole看到的线程信息,发现没有thead-0线程了。这就很明确了,因为thead-0没有捕获该异常,跳出了while循环,导致thea...
2018-10-23 19:33:53
1054
原创 struts2 每次请求都来实例化一次action,会不会造成内存溢出
struts 2的Action默认是多实例的,每次请求都要实例化一个对象,strust2的action里面很多情况下都是需要定义成员变量用来接收表单上的值,如果只是一个对象的话,那么很可能会出现多个线程共用一个成员变量 出现线程安全问题,因此struts2每次请求都要创建一个Action对象,它的优势是线程安全的,每次请求都有单独的Action类来处理,不像servlet和struts1一样不是线...
2018-10-12 19:07:42
1444
原创 c3p0数据库使用
1.导入相关jar1.编写c3p0-config.xml // 创建c3p0连接池核心工具类 // 自动加载src下c3p0的配置文件【c3p0-config.xml】 ComboPooledDataSource dataSource = new ComboPooledDataSource();// 使用默认的配置 PreparedStatement pstmt = null; ...
2018-09-22 17:34:37
147
原创 数据库连接池
数据库连接池的优点运行原理:在我们不使用数据库连接池的时候,每次访问数据库都需要创建连接,使用完成之后需要释放关闭连接,而这样是很耗费资源的。当我们使用数据库连接池的时候,在tomcat启动的时候就创建了指定数量的连接,之后当我们程序使用的时候就直接从连接池里面取,而不需要创建,同理,当我们使用完的时候也不需要关闭连接,而是将连接返回到连接池中,供其他请求继续使用。DBCP:比较稳定...
2018-09-22 17:14:14
203
原创 Java后端技术栈,深入学习
面向对象三大特征1. 封装封装:将相同的功能进行封装,便于下一次的调用有代码的封装,功能的封装,分模块,分包,分工程。封装的步骤:1)使用private修饰需要被封装的属性。2)提供一个公共的方法设置或者获取该私有的成员属性。命名规范:public set属性名();public get属性名();封装的好处:1)提高数据的安全性2)操作简单3)隐藏了实现2. 继承继...
2018-09-20 19:43:33
468
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人