自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shadon178 博客

常常总结,常常分享。

  • 博客(54)
  • 资源 (14)
  • 问答 (1)
  • 收藏
  • 关注

原创 数据库与对象存储S3如何保持一致性

讨论数据库存储和文件上传操作如何保证一致性的问题

2023-01-14 21:41:24 620 1

原创 MySQL SQL优化

索引优化原则1、组合索引中,如果索引字段的用到了范围查询,那么之后的字段就无法使用索引。例如:有组合索引(a1,a2,a3)在表table1上,那么SQL语句 select * from table1 where a1 = 1 and a2 > 1 and a3 = 3;那么a3字段无法走索引。2、关联查询的关联字段的索引建立原则,左连接右表建索引,右连接左表建索引。3、索引用在经常使用的字段上面。4、小表驱动大表。5、优先优化内层循环。6、JoinBuffer可以适当调大。索引失效

2022-01-29 20:48:59 1909 1

原创 MySQL 锁

锁介绍复习:事务和ACID特性并发事务问题:更新丢失、脏读、不可重复读、幻读隔离级别MySQL默认的隔离级别:可重复读在MySQL中锁是由存储引擎实现的。行锁共享锁(shared locks)和排他锁(exclusive locks)在InnoDB存储引擎中默认使用的就是行锁,分为共享锁和排它锁。共享锁:容许事务加锁去读取某一行数据。排它锁:容许事务持有锁去更新和删除某一行数据。意向锁 (intention locks)innodb支持多种粒度的锁,这种锁可以允许行锁和表

2022-01-29 20:30:40 707

原创 MySQL explain讲解

用法explain <查询SQL>索引用途:排序和查询;id列id相同,执行顺序由上到下。id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。id相同和不同的会同时存在。select_type列simple: 检查的select查询,查询中不包含子查询或者unionprimary: 查询中若包含任何复杂的子部分,最外层被标记为primary,一般最后执行的。subquery: 在select或where列表中包含了子查询derived:在fro

2022-01-26 00:34:17 991

原创 强一致性算法ZAB

2022-01-23 23:21:20 288

原创 强一致性算法Paxos

2022-01-23 23:20:00 1414

原创 Raft算法

Raft算法一致性算法,主要解决选举问题(leader election)和副本同步问题(log replication)强烈推荐看这个动画学习该算法http://thesecretlivesofdata.com/raft/

2022-01-23 22:52:59 148

原创 Java开发之实时计算--Flink

简介介绍计算框架对java开发的重要性介绍flink的架构介绍flink的基本概念:常用算子、checkpoint、state、window介绍flink的编程模型:DataStream、DataSet、Table API、SQL介绍flink的部署计算框架每个Java开发一定要懂至少一个流行的计算框架,因为现在的数据量越来越大,光靠数据库或者手写代码去实现难度已经越来越大,不仅涉及到资源调度,还要考虑分布式,并且还要考虑高可用、容错等等,因此我们需要借助现有的分布式计算框架来实现我们大规

2022-01-23 14:10:43 9790 2

原创 Java开发之消息队列

简介介绍消息队列的重要性介绍Java程序员常用的Kafka消息队列介绍Kafka内部的一些机制及注意问题为什么要使用消息队列?比较常见的作用有3点,解耦、异步处理、流量削峰,这里分别一一介绍这些特点。解耦我们在设计微服务的时候经常会出现几个模块之间需要相互依赖,例如A和B服务相互依赖,那么部署一个A,必须部署一个B,导致A模块和B模块之间形成了强耦合。如果此时我们在A和B模块之间引入消息队列,那么A可以不用依赖B,只需要A和B之间规定通用的消息格式即可,这样A和B就解耦了,这样以后别的模块

2022-01-18 22:44:17 8521

原创 Java开发之常见缓存系统

前言主要介绍在java项目开发中,如何设计缓存系统,以及需要注意的一些问题。常见框架中的缓存方式Web缓存数据库缓存Redis缓存为什么需要缓存?可以说,缓存的设计在整个IT行业无处不在,不论是硬件还是软件。从CPU寄存器、CPU L1/L2/L3级缓存,再到我们用的内存,以及硬盘里面的缓存,都是缓存系统的考虑。他们解决问题的目的只有一个:CPU速度太快,而磁盘速度太慢;CPU负责计算,磁盘负责存储。因此,CPU和磁盘不可避免的必须时时刻刻交换数据,如果每次都从磁盘获取数据,效率太低,因此

2022-01-16 17:43:15 1073

原创 Flink Yarn的2种任务提交方式

Flink Yarn的2种任务提交方式Pre-Job模式介绍每次使用flink run运行任务的时候,Yarn都会重新申请Flink集群资源(JobManager和TaskManager),任务执行完成之后,所申请的Flink集群资源就会释放,所申请的Yarn资源是独享的,不与其他任务分享资源。运行命令./bin/flink run -m yarn-cluster -yn 3 -ys 12 -p 4 -yjm 1024m -ytm 4096m ./examples/batch/WordCount.

2021-10-24 16:23:09 3978

原创 Feign全局配置和局部配置

Feign全局配置和局部配置在使用Feign的时候需要注意是否为全局配置和局部配置,否则可能会导致各种奇怪异常,而且在调试的是否也不容易看出问题。全局配置和局部配置的差别比较微妙,稍不注意可能会出问题。因此,这里总结给大家,防止大家也出现异常的问题。全局配置:@Configurationpublic class FeignConfiguration { @Bean public FeignBasicAuthRequestInterceptor basicAuthRequestInt

2021-10-02 13:05:53 5058 1

原创 Feign 400错误引发的一系列问题

Feign 400错误引发的一系列问题问题介绍在使用Feign进行远程调用的时候出现非常奇怪的400错误,错误信息大概如下:feign.FeignException: status 400 reading并且还带有2个非常奇怪的问题:一个前端请求接口,到达后端的时候会发起2次相同的Feign远程调用,但第一次成功,但是第二次会失败,错误信息如上。一个前端请求接口,达到后端的时候调用Feign接口的时候会卡死。问题定位通过开启debug模式,查看输出日志发现,2个Feign接口都调用成功了

2021-10-02 12:22:54 1456

原创 Oracle实时数据抽取项目问题总结

Oracle实时数据抽取项目问题总结项目背景介绍项目主要是将Oracle、MySQL、SQLServer、Db2等其他数据库的实时变更数据同步到其他异构数据库中。本篇文章主要是讨论oracle的实时采集,通过Logminer捕获归档日志,然后将提取后的数据推送到Kafka中。项目使用的技术框架使用的核心框架:https://github.com/debezium/debezium 用于捕获归档日志,然后推送到kafka中。Debezium框架是基于Kafka Connect实现的,分为sour

2021-09-11 11:24:03 1071

原创 线程上下文类加载器在项目中的应用

项目背景支持多种数据源、多种版本的数据库元信息(表信息、字段信息等)同步功能。为了加快同步效率,用到了线程池以此来加快同步效率。面临的问题因为有不同版本、不同数据库的驱动jar,因此不可能将所有的驱动jar都放在一起,因此使用了动态加载jar的方式来隔离不同的驱动jar。初版设计首先设计了所有数据源共同使用的接口,放在web模块,接口如下:public interface GetDBMetaDao { List<TableInfo> getAllTable(String

2021-08-07 12:12:01 281

原创 System.currentTimeMillis()和System.nanoTime()的区别

System.currentTimeMillis()返回的是1970 年 1 月 1 日午夜到目前的毫秒数,建议主要用于获取时间,而不要用于计时,因为在计时的过程中,时间可能受NTP(时间服务器)的影响产生计时误差。System.nanoTime()返回的是一个会不断自增的、精确计时的纳秒数,不受NTP的影响,因此不能用于获取时间,但是非常适合用于精确的计时场景。总结1、System.currentTimeMillis()适合获取时间的场景;2、System.nanoTime()适合计时的场景;

2021-07-17 09:33:44 859

原创 Java性能优化建议

大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识。是的,这并不没有错。诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事。下面有几个很容易遵循的建议和最佳实践能够帮你创建一个性能良好的应用程序。这些建议中的大多数都是基于Java的,但是也不一定,也有一些是可以应用于所有的应用程序和编程语言的。在我们分享基于Jav...

2019-03-24 22:22:49 226

原创 事务概述

在与数据库打交道的过程中,事务是一个必须掌握的技能之一。在一般的小项目中由于并发有限,很难看出事务的问题,但是在大型项目中,在高并发的条件下,如果处理不好事务问题,会出现许多很难察觉到的问题,并且也很难清楚的找到问题的根源。处理不好事务会导致许多数据问题,数据可是一家公司重要的财富,因此事务是一个高级程序员必须,也是一定要掌握的技能。ACID特性首先需要了解事务的四大特性(ACID):...

2018-03-25 14:36:48 277

原创 Java程序猿学Python之Import语句

Import语句可以说在Python中是无处不在,非常类似于Java中的import的语句,但是又比Java的强大很多,也复杂的多。首先本文章会讲解import语句的作用,然后讲解一下import语句的内部执行原理以及import语句是按什么样的顺序寻找文件;再者讲解from语句与import语句的使用,动态加载,包导入(又分为相对导入和绝对导入),命名空间包等与import相关的话题。本文章...

2018-03-25 12:33:37 2935

转载 ArrayList循环遍历并删除元素的陷阱

在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出bug。不妨把这个问题当做一道面试题目,我想一定能难道不少的人。今天就给大家说一下在ArrayList循环遍历并删除元素的问题。首先请看下面的例子:import java.util.Arra...

2018-03-15 09:10:25 441

原创 LockSupport的park和unpark操作

以前见到过很多次这个类—java.util.concurrent.locks.LockSupport,然而却没有当一回事。一次偶然的机会看到dump文件中很多park操作,这才仔细的研究了一番。LockSupport类似于信号量中的二元信号,主要有如下2个方法: public static void unpark(Thread thread) 释放thread线程的许可证 pub...

2018-03-13 18:20:32 3645 1

原创 Dump文件分析

本文主要介绍Dump文件结构,理解Dump文件对于分析线程高占用、死锁、内存溢出等高级问题有非常重要的指导意义。什么是Dump文件Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。 Dump文件是用来给程序编写人员调试程序用的,这种文件必须用专用工具软件打开。如何生成Dump文件使用命令:jstack pid 可以查看到当前运行的java进程...

2018-03-13 17:34:39 29015

原创 SQLServer的sql_variant数据类型

sql_variant类型的字段在使用中踩过的坑,总结一下:sql_variant类型的字段如果在select语句上直接使用会导致后台抛错,错误信息如下:com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supported.因此,在使用sql_variant类型的字段的时候需要...

2018-03-09 15:52:28 8629

原创 TCP建立连接和关闭连接的过程

先来一张图看看整个连接和关闭的过程: 各个状态的意义如下: LISTEN:侦听来自远方TCP端口的连接请求; SYN-SENT:在发送连接请求后等待匹配的连接请求; SYN-RECEIVED:在收到和发送一个连接请求后等待对连接请求的确认; ESTABLISHED:代表一个打开的连接,数据可以传送给用户; FIN-WAIT-1:等待远程TCP的连接中断请求,或先前的连接中...

2018-03-07 18:11:56 9641

原创 Java程序猿学Python---集合推导式 Comprehension和生成表达式Generator Expression

集合表达式是Python强大的功能之一,每个Python必须学习基本功。List推导式(List Comprehension)快速创建List集合&gt;&gt;&gt; [x * x for x in range(10)] # List comprehension: builds list[0, 1, 4, 9, 16, 25, 36, 49, 64,...

2018-03-07 16:46:06 494

原创 Java程序猿学Python---mpa、filter、reduce方法

当我们有了java语言的基础,这几个方法简单的瞟一眼就明白了。map方法方法声明:map(func, *iterables) –&gt; map object 方法作用:在iterables参数上应用func指定的方法。 使用例子1:&gt;&gt;&gt;counters = [1, 2, 3, 4]&gt;&gt;&gt;list(map((lambda x: x + 3),...

2018-03-07 15:43:56 358

转载 Redis在游戏开发中的典型应用

1.摘要Redis作为目前最流行的键值对存储数据库,有着丰富的数据结构支持,在民生、金融、游戏、直播等诸多领域都有广泛的应用,大大提升了开发者的开发效率。今天我们主要介绍Redis在游戏开发中的几个典型应用场景:用户数据缓存、持久化功能的消息队列、乐观锁功能。2.典型应用场景下面我们一一来介绍上述几个场景下是如何应用Redis的。2.1 Redis作为DB的缓存通常来说,每...

2018-03-05 10:37:40 1571

原创 Python学习之旅--Lambda表达式在循环语句中需要注意的问题

目前在学习Python中,不时的总结一些学习过程中遇到的一些问题。在循环语句中使用Lambda表达式时需要注意一些潜在的问题,先看代码:&gt;&gt;&gt; def makeActions(): acts = [] for i in range(5): # Tries to remember each i acts.appen...

2018-02-24 18:00:09 4273 1

原创 Scala中的模式匹配match

scala中的模式匹配类似与java中的switch语法,但功能比switch更加强大,且能匹配的方式各种各样。我总结了一下,scala的match的匹配方式有如下几种:通配模式 变量模式 构造器模式 序列模式 元组模式 类型模式

2017-09-01 12:19:40 1132

原创 Spark中宽依赖和窄依赖的区别

Spark中宽依赖和窄依赖窄依赖:RDD的每个分区仅依赖一个父RDD的分区;宽依赖:RDD的每个分区依赖多个父RDD的分区;那么为什么要区分窄依赖和宽依赖呢?窄依赖在划分Stage时,可以划分在一起,而且可以并行计算,并且在数据恢复时只需要重新计算父RDD即可,恢复方便。而宽依赖则不然,因为宽依赖的范围较广,必须重新计算所有的父RDD依赖,计算量大,不容

2017-07-28 18:26:50 1644 1

原创 Redis集群原理分析

Redis集群的原理主要是围绕着‘槽’的概念展开的,先来理解集群中‘槽’的概念。reids集群是通过将所有的key进行分区来实现的,redis集群最多有16384个分区(也可以称作‘槽’,英文:slot),然后在集群节点中指定分区范围来实现。例如:集群中的节点A负责0 - 10000,节点B负责 10001-16384,每个节点负责的分区数可以自行设置。redis中的每一个key都有唯一的分区号与

2017-02-24 16:50:27 483

原创 request中参数(parameter)和属性(Attribute)的区别

在JAVA WEB开发中经常遇到获取请求参数的值和在request对象中set或者get属性,初学者往往容易混淆,那么二者之间关系到底如何呢?下面是个人的总结:区别:来源不同: 参数(parameter)是从客户端(浏览器)中由用户提供的,若是GET方法是从URL中提供的,若是POST方法是从请求体(request body)中提供的; 属性(attribut

2017-02-05 17:36:53 20755 4

原创 Oracle自带全文索引

使用场景:当需要在大量文章中通过关键字搜索文章时,Oracle自带的全文索引对于提高搜索性能非常有帮助,并且使用也很方便。使用前的准备工作:1、先查看oracle是否自带有ctxsys用户,如果没有该用户则不能使用全文索引功能,必须先手动安装,安装方式很简单,参考下一步;2、如果自带有ctxsys用户,请忽略该步骤;(1)dba账号登录SQLPLUS,创建全文索引使

2017-01-21 22:17:17 986

原创 Java延迟初始化的2种经典模式

静态域的延迟初始化: // Lazy initialization holder class idiom for static fields private static class FieldHolder { static final FieldType field = computeFieldValue(); } static FieldType getField() { r

2016-01-05 23:40:46 1047

原创 私有锁对象模式

// private lock object idiom - thwarts denial-of-service attack private final Object lock = new Object(); public void foo() { synchronized (lock) { ... } }优点:防止其他客户端超时的持有锁对象,从而避免客户端的拒

2016-01-05 23:17:30 1799

原创 Collection.synchronized*方法注意事项

引API的一句话:返回指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成所有对底层实现列表的访问。在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步: List list = Collections.synchronizedList(new ArrayList()); ... synchronized(list) {

2016-01-05 22:46:20 1057

转载 MyBatis缓存

Mybatis缓存一、MyBatis缓存介绍  正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。  2. 二级缓存与一级缓存其机制相

2015-09-20 21:55:11 325

转载 JavaScript原型链

一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的。分为普通对象和函数对象,Object ,Function 是JS自带的函数对象。下面举例说明 function f1(){}; var f2 = function(){}; var f3 = new Function('str','console.log(str)'); var o3

2015-09-16 22:36:27 350

原创 this是谁?

JavaScript中的this跟面向对象语言中的this有些区别,在实际编码中需要注意一些小问题。 name = 'pxd'; var obj = {name:'java', t:function(){ alert(this.name); }}; var temp = obj.t; temp(); //pxdname相当于是一个全局变量,类似于:win

2015-09-13 21:37:29 410

转载 Ext的get和fly方法

Ext.Element是Ext对Dom元素的一个强有力封装,它封装了很多方便对dom操作的接口(并通过Element的dom属性引用对应的dom元素),因此每创建一个Element元素都将消耗不少的内存(主要是大量的操作接口消耗),因此如果创建过多的Element元素必然导致内存占用的剧增和系统性能的下降。Ext.get和Ext.fly返回的都是一个Element对象,但是Ext.

2015-09-12 21:28:24 553

JOOQ jar包

JOOQ 是基于Java访问关系型数据库的工具包,轻量,简单,并且足够灵活,可以轻松的使用Java面向对象语法来实现各种复杂的sql。对于写Java的码农来说ORMS再也熟悉不过了,不管是Hibernate或者Mybatis,都能简单的使用实体映射来访问数据库。但有时候这些 ‘智能’的对象关系映射又显得笨拙,没有直接使用原生sql来的灵活和简单,而且对于一些如:joins,union, nested selects等复杂的操作支持的不友好。JOOQ 既吸取了传统ORM操作数据的简单性和安全性,又保留了原生sql的灵活性,它更像是介于 ORMS和JDBC的中间层。对于喜欢写sql的码农来说,JOOQ可以完全满足你控制欲,可以是用Java代码写出sql的感觉来。

2019-04-28

深入理解Linux内核第三版(英文原版)

该书指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了Intel特有的重要性质。相关的代码片段被逐行剖析。然而,《深入理解LINUX内核》涵盖的不仅仅是代码的功能,它解释了Linux以自己的方式工作的理论基础。

2019-04-22

数据结构经典教程

本书与清华大学出版社出版的《数据结构》(c语言版)一书相配套,主要内容有:习题与学习指导、实习题和部分习题的提示或答案三大部分和一个附录[“数据结构算法演示系统(类c描述语言3.1中文版)使用手册”,此软件已由清华大学出版社出版]。 其中习题篇的内容和《数据结构》(c语言版)一书相对应,也分为12章,每一章大致由基本内容、学习要点、算法演示内容及基础知识题和算法设计题五部分组成。实习题分成六组,每一组都有鲜明的主题,围绕1至2种数据结构,安排4至9个题,每个题都有明确的练习目的和要求,在每一组中都给出一个实习报告的范例,以供读者参考。 [1]

2019-04-18

TBase数据库教程

简单易用 开箱即用的用户体验,清晰合理的分布式架构方案,便捷的现有业务迁移接入。 安全可靠 支持金融级别的两地三中心容灾方案,特有的数据行级非对称加密特性,完善的数据访问安全管理和审计功能。 按需扩展,高效灵活 支撑海量数据的高并发在线交易型业务,提供灵活、完善的数据治理功能,助力解决各种数据治理难题。 简化运维 沉淀了丰富的运维经验,积累了大量数据库运维工具,降低分布式系统的运维门槛。

2019-04-18

Neo4j开发手册

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。 Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注.

2019-04-18

OAuth2实战

OAuth是互联网公司广泛使用的授权协议,守护着全球不计其数的Web API。看似无所不能的它,却因为高度的灵活性而很难驾驭。本书从实战角度出发,带你领略OAuth生态系统的秀美风光,并学会自己构建安全的客户端、受保护资源和授权服务器,透彻理解OAuth 2的实现和部署流程,不仅知其然,还知其所以然。 本书重点讲解以下内容: - OAuth 2的设计理念和重要性; - 构建OAuth 2生态系统; - OAuth 2生态系统的常见漏洞; - 针对OAuth令牌和授权码的常见攻击; - 动态客户端注册。 “非常实用,告诉我们什么该做,什么不该做。”——Ian Glazer,Salesforce公司身份管理高级总监 “这本书的深度和广度令人折服,推荐所有Web开发人员都看看。”——Thomas O'Rourke,软件工程师 “内容简洁、结构清晰,让我对OAuth有了透彻了解。”——Roy Folkker,亚马逊读者

2019-04-18

Python机器学习实践指南

非常完整清晰的电子书,并结合机器学习。强烈推荐!作者:Alexander T. Combs 是一位经验丰富的数据科学家、策略师和开发人员。他有金融数据抽取、自然语言处理和生成,以及定量和统计建模的背景。他目前是纽约沉浸式数据科学项目的一名全职资深讲师。

2018-02-02

POI官方Jar包

POI官方Jar包 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 结构: HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。 HWPF - 提供读写Microsoft Word格式档案的功能。 HSLF - 提供读写Microsoft PowerPoint格式档案的功能。 HDGF - 提供读写Microsoft Visio格式档案的功能。

2014-05-29

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除