hibernate

百亿互金平台救火故事

六眼飞鱼酱① 提交于 2020-10-29 04:09:20
多年前,又是周六客服打电话过来,平台官网不能访问,app完全无法打开,客户在QQ群和 微信 群中各种反馈,说平台是不是跑路了?客服的多条400热线完全被打爆,电话已经接不过来… 前言 一直以来总是想以什么方式去记录下自己在互金行业的这段经历,趁着自己还记得清楚,还能找到一些资料原型,一方面可以分享出来供大家参考,但是更重要就是多年以后我可以根据这些文章回忆起来自己的那段激情岁月。 想了很久但一直没有实施,后来觉得应该从 架构 的角度来梳理一篇文章,就写了 从零到百亿互联网金融架构发展史 这篇文章;最后认为只有实战出来的东西以及解决问题的过程,才是工作中最宝贵的经验,应该把它分享出来,在梳理的过程中觉得有三起事故比较有代表性就整理出了下面这三篇文章,本篇文章从整体来回忆一下一路走过来所经历过的救火故事。 一次生产事故的优化经历 一次dns缓存引发的惨案 一个脚本引发的血案 作为一个互联网金融平台,涉及到用户资金,任何的服务(资金)差错用户都是不可容忍的,用户不懂什么是 数据库 ,不知道什么网络不通,就是一会看不到钱在app里面展示都会觉得不安。在已经有很多P2P公司跑路的前提下,用户个个已经被锻炼成为福尔摩斯侦探,每天打开app查看收益,监控着平台一切,甚至半夜升级断网十分钟,也会被用户察觉,直接就发到群里面,更有甚者直接在QQ群或者微信群中你们的技术行不行!

【面试官之你说我听】-MyBatis常见面试题

拟墨画扇 提交于 2020-10-28 17:04:22
关注公众号【 Ccww笔记 】,原创技术文章第一时间推出 “致"高级"工程师(BUG工程师) 一颗折腾的心 💗 欢迎关注文章系列,一起学习 如果此文对你有帮助、喜欢的话,那就点个“在看”呗,点个关注呗! 精讲#{}和${}的区别是什么? mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值。 mybatis在处理${}时,就是把${}替换成变量的值。 使用#{}可以有效的防止SQL注入,提高系统安全性。原因在于:预编译机制。 预编译完成之后,SQL的结构已经固定,即便用户输入非法参数,也不会对SQL的结构产生影响,从而避免了潜在的安全风险。 预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。 既然${}会引起sql注入,为什么有了#{}还需要有${}呢?那其存在的意义是什么? #{}主要用于预编译,而预编译的场景其实非常受限,而${}用于替换,很多场景会出现替换,而这种场景可不是预编译 数据库链接中断如何处理 数据库的访问底层是通过tcp实现的,当链接中断是程序是无法得知,导致程序一直会停顿一段时间在这,最终会导致用户体验不好

三问Spring事务:解决什么问题?如何解决?存在什么问题?

我与影子孤独终老i 提交于 2020-10-28 15:17:21
1. 解决什么问题 让我们先从事务说起,“什么是事务?我们为什么需要事务?”。事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败。我们在开发中需要通过事务将一些操作组成一个单元,来保证程序逻辑上的正确性,例如全部插入成功,或者回滚,一条都不插入。作为程序员的我们,对于事务管理,所需要做的便是进行事务的界定,即通过类似begin transaction和end transaction的操作来界定事务的开始和结束。 下面是一个基本的JDBC事务管理代码: // 开启数据库连接 Connection con = openConnection(); try { // 关闭自动提交 con.setAutoCommit(false); // 业务处理 // ... // 提交事务 con.commit(); } catch (SQLException | MyException e) { // 捕获异常,回滚事务 try { con.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } finally { // 关闭连接 try { con.setAutoCommit(true); con.close(); } catch (SQLException e) { e.printStackTrace(); }

很多未解之谜终于有答案了——2018年JVM生态系统报告出炉

随声附和 提交于 2020-10-28 07:48:24
很多未解之谜终于有答案了——2018年JVM生态系统报告出炉 在Java开发者中,一直存在着很多鄙视链。如: IntelliJ → Eclipse → NetBeans Unix → Linux → Mac OS→ Windows → DOS Emacs → Vim → Sublime → Word → Power Point 这诸多鄙视链中一直存在着很大的争议 也正是存在诸多争议,导致很多开发者更加迷茫 到底选择IntelliJ还是Eclipse? Java 11 出来了,我要不要升级? 听说SSH过时了?那Hibernate还要不要学了? Git和SVN,Maven和Gradle,到底如何选? 我今年30岁了,还要继续做开发吗? 笔者无法给出明确的答案,只能给你一些建议。 近日,SNYC出炉了一份2018年JVM生态系统报告 涉及到了很多一直困扰广大Javaer的问题 让我们一起来看一下 全世界的广大开发者是如何解决这些世纪难题的? 生产环境中主要使用哪个厂商提供的JDK 很多厂商都提供了自己的JDK实现,到底哪个厂商提供的JDK更受开发者青睐呢,调查发现,Oracke JDK以70%的绝对优势占据了主导地位。 生产环境中主要使用哪个版本的Java SE 目前,Java SE 官方版本已经更新到了 Java 11,但是,光大开发者主要使用的版本是哪个呢? 调查结果显示,80

我们如何学好Java?

不打扰是莪最后的温柔 提交于 2020-10-28 03:51:26
正在学习Java 计算机语言并且打算作为自己今后的发展方向,不幸的是你在学习中遇到了比较困惑而又不能解决的问题, 你必需要明确以下几个很重要的问题和掌握相对正确和适合自己学习编程的方法,从而为自己解惑并不断的提高自己,最终达到一个多数企业入职的基本标准。 首先,你要清楚自己学习Java的真正目标是否明确,学习Java的想法是否是成熟的。对于这个问题可能很多人都会不屑一顾,凭借我多年从事Java开发及在工作中接触的多数搞Java开发的人经验而言,最终能够把Java 语言学好,多数人都是将Java作为自己以后从事此项工作为目标,这个目标一旦明确则给与自己无尽的动力和压力,没有动力和压力人就有各种借口遇到困难而退缩甚至放弃。 其次,在你有了非常明确的目标后,而为之努力学习过程中,你必需清楚多数企业对于Java 开发人员的基本入职要求和需要掌握哪些常用技术。当然不同企业要求是由些差异的,不过对于一个初学Java的人而言,通常应该知道以下是大多数企业对于初级程序员的基本要求,可以从以下几个技术方面审核自己的技术水平。 一、任何Java开发方向都必需要将Java SE基础核心理论知识及实用技术牢牢掌握,从Java角度讲无论什么样的所谓高级Java技术都建立在Java SE核心基础之上,譬如Jsp 动态网页技术,Servlet Java EE标准核心控制器, freemarker 模板技术,

BAT大厂Java面试必备:Java开发岗位面试题归类汇总

醉酒当歌 提交于 2020-10-27 18:30:26
前言 相信每个程序员,都有一个进大厂的梦,但是很多小伙伴都败在了面试的路上,这里,小编总结了一些BAT大厂Java面试必备的知识点,分享给大家,希望大家能早日进入自己理想的公司~~ 一、Java基础 String类为什么是final的 HashMap的源码,实现原理,底层结构。 说说你知道的几个Java集合类:list、set、queue、map实现类。 描述一下ArrayList和LinkedList各自实现和区别 Java中的队列都有哪些,有什么区别。 反射中,Class.forName和classloader的区别。 Java7、Java8的新特性 Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高。 Java内存泄露的问题调查定位:jmap,jstack的使用等等。 string、stringbuilder、stringbuffer区别 hashtable和hashmap的区别 异常的结构,运行时异常和非运行时异常,各举个例子。 String 类的常用方法 Java 的引用类型有哪几种 抽象类和接口的区别 java的基础类型和字节大小 Hashtable,HashMap,ConcurrentHashMap底层实现原理与线程安全问题。 如果不让你用Java Jdk提供的工具,你自己实现一个Map

Java工程师成神之路 | 2020正式版

﹥>﹥吖頭↗ 提交于 2020-10-27 10:02:06
Java工程师成神之路 | 2020正式版 △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 262 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 主要版本 更新时间 更新内容 v3.0 2020-04-13 知识体系完善,在v2.0的基础上,新增20%左右的知识点; 调整部分知识的顺序及结构,方便阅读和理解; 通过GitHub Page搭建,便于阅读 v2.0 2019-02-19 结构调整,更适合从入门到精通; 进一步完善知识体系; 新技术补充; v1.1 2018-03-12 增加新技术知识、完善知识体系 v1.0 2015-08-01 首次发布; 基础篇 面向对象 什么是面向对象 面向对象与面向过程 面向对象的三大基本特征 面向对象的五大基本原则 封装、继承、多态 什么是多态 方法重写与重载 Java的继承与实现 Java的继承与组合 构造函数与默认构造函数 类变量、成员变量和局部变量 成员变量和方法作用域 平台无关性 Java如何实现的平台无关性的 JVM还支持哪些语言 值传递 值传递、引用传递 为什么说Java中只有值传递 Java基础知识 基本数据类型 8种基本数据类型 整型中byte、short、int、long的取值范围 什么是浮点型? 什么是单精度和双精度? 为什么不能用浮点型表示金额?

2020秋招面试必刷mybatis核心知识点(含答案)

最后都变了- 提交于 2020-10-27 00:39:00
嘿,每日干货分享来袭,持续更新内容涵盖: Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、 Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、 Linux 等技术栈. MyBatis 面试题: 1、什么是 Mybatis? Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性 能,灵活度高。 2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数 据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 3、通过 xml 文件或注解的方式将要执行的各种 statement 配置起来 ,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最 后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。(从执行 sql 到返 回 result 的过程). 2、Mybaits 的优点: 1、基于 SQL 语句编程,相当灵活

SpringBoot整合Hibernate Validator实现参数验证功能

♀尐吖头ヾ 提交于 2020-10-26 23:18:10
  在前后端分离的开发模式中,后端对前端传入的参数的校验成了必不可少的一个环节。但是在多参数的情况下,在controller层加上参数验证,会显得特别臃肿,并且会有许多的重复代码。这里可以引用Hibernate Validator来解决这个问题,直接在实体类进行参数校验,验证失败直接返回错误信息给前端,减少controller层的代码量。 一、xml引入Hibernate Validator <!-- 验证器 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.5.Final</version> </dependency> 二、通过注解在实体类进行参数校验 @Data public class UserModel { @NotNull(message = "用户名称不能为空!" ) private String userName; @NotNull(message = "age不能为null!" ) @Range(min = 1, max = 888, message = "范围为1至888" ) private Integer age; /** * 日期格式化转换 */ @NotNull