java
里面是我在学习过程中写过的一些java程序,长久更新
scx_white
这个作者很懒,什么都没留下…
展开
-
syntax error near unexpected token `(‘ 异常解决
问题的发现今天执行一个shell脚本时发现报错了,报错内容如下:syntax error near unexpected token `('脚本内容排查了很多遍都没有找到原因,执行的方式为 sh xx.sh然后使用 source xx.sh 执行和 bash xx.sh执行都是 ok 的。知识的了解此时就需要了解 sh source bash 执行文件的区别。首先看两张图...原创 2019-06-11 19:51:27 · 155213 阅读 · 4 评论 -
关于 mysql 的共享锁 排它锁以及锁的实现方式 行锁 间隙锁 Next-Key Lock
在 mysql 中有事务四大基本特性,隔离级别,锁类型,b+ 树等各种需要我们学习的知识,这里简单分享一下 mysql 中的锁。使用 mysql 数据库的都知道我们经常使用的数据库引擎有 MyISAM 和 InnoDB。MyISAM默认表类型,它是基于传统的 ISAM 类型,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的 select,insert时, M...原创 2019-02-13 16:20:59 · 1427 阅读 · 4 评论 -
Dubbo 源码分析之服务降级
前言关于服务降级,相信很多小伙伴都听说过或者操作过。比如最近我们在 12306 上抢票回家,明明看到剩余的有票,可就是买不到,这就是很明显的一个(读)服务降级例子。再比如双十一时我们付款时偶尔出现付款失败,重新支付,也是(限流)服务降级的一种,也有许多其它降级的例子,大家可以自行搜索。具体来说就是:当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源...原创 2019-01-24 19:49:55 · 762 阅读 · 0 评论 -
Dubbo 源码分析之线程池
文章目录前言Dubbo 线程池分类Dubbo 线程工厂线程池拒绝策略CachedThreadPoolFixedThreadPoolLimitedThreadPool前言相信学过 netty 的都知道,每一个 ChannelHandler 都是通过它的 EventLoop(I/O线程) 来处理传递给它的事件,所以至关重要的是不要阻塞这个线程,因为这会对整体的 I/O 产生负面的影响。Dubbo...原创 2019-01-19 14:46:25 · 1945 阅读 · 0 评论 -
Dubbo 源码分析之 SPI 详解
我使用的是dubbo2.5.3的源码,有中文注释。为了更方便的学习,可以慢慢来,等这个版本掌握差不多了就可以看更高的版本了。在Protocol接口的实现类中不存在@Adaptive注解的实现类,所以在使用Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension()这...原创 2019-01-18 20:09:44 · 857 阅读 · 0 评论 -
Dubbo 源码分析之自定义线程池拒绝策略(使用 Java 程序 Dump 线程堆栈信息)
最近在看dubbo源码,真的学习了很多知识,记得上次看dubbo源码是在半年前了,看到dubbo自定义的spi就看不下去了,完全看不懂。上周又看了看,顿时茅塞顿开,有时间会分享出来。废话不多说,在dubbo内部有几种线程模型,都是使用java线程池实现的,任务被拒绝后会输出堆栈信息。我们可以看它是怎么实现的。package org.apache.dubbo.common.threadpoo...原创 2019-01-14 11:15:10 · 1807 阅读 · 0 评论 -
Java设计模式(三)模板方法模式
模版方法:在抽象类中定义了一个模版方法,在模版方法中使用了一些该抽象类中定义的空方法,而这些空方法可以供子类实现。我们在查看源码时经常能够看到在执行一些重要的方法时,往往调用了一些看似没有什么意义的空方法。其实这就是模版方法。abstract class ThreadHolder { /** * 模版方法 * @param runnable */ ...原创 2019-01-09 10:59:46 · 463 阅读 · 2 评论 -
赫拉(hera)分布式任务调度系统之Q&A(五)
文章目录q:依赖任务的周期怎么填?q:新加的任务什么时候会加入调度q:想立刻加入调度怎么办q:资源文件怎么上传不成功q:开启/关闭/失效按钮的区别q:如何控制任务的并行数量q:任务执行会冲突吗q:什么是漏跑检测重试q:什么是任务信号丢失重试q:为什么任务无法关闭q:为什么任务无法开启q:`master`挂了,`work`会抢占`master`吗q:`master`挂了,哪些`work`会抢占`ma...原创 2019-01-08 15:51:29 · 3771 阅读 · 3 评论 -
赫拉(hera)分布式任务调度系统之版本(四)
文章目录赫拉文章版本介绍版本的使用加入群聊赫拉文章赫拉(hera)分布式任务调度系统之架构,基本功能(一)赫拉(hera)分布式任务调度系统之项目启动(二)赫拉(hera)分布式任务调度系统之开发中心(三)版本介绍在hera系统中支持历史版本的数据重跑。每一个任务都会生成版本,版本时间根据cron表达式来产生。其中版本在脚本中没有使用内置变量时无用。版本号的生成规则为:yyyyMM...原创 2019-01-04 15:21:26 · 3255 阅读 · 0 评论 -
赫拉(hera)分布式任务调度系统之架构,基本功能(一)
前言在大数据平台,随着业务发展,每天承载着成千上万的ETL任务调度,这些任务集中在hive,shell脚本调度。怎么样让大量的ETL任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。hera任务调度系统就是在这种背景下衍生的一款分布式调度系统。随着hera集群动态扩展,可以承载成千上万的任务调度。它是一款原生的分布式任务调...原创 2018-12-20 17:14:38 · 13409 阅读 · 4 评论 -
关于Class.forName
前言相信大家在使用反射操作时多多少少能用到这个方法。如果你使用了mysql数据库并且使用了原生的数据库操作,你肯定有一段这样的代码Class.forName("com.mysql.jdbc.Driver"); 这段代码的意义就是生成一个代表com.mysql.jdbc.Driver类的java.lang.Class对象到内存中,作为方法区这个类的各种数据的入口,在执行初始化操作时调用该类静态代码...原创 2018-10-12 11:34:32 · 3519 阅读 · 0 评论 -
zookeeper数据恢复
刚刚在向hbase表写数据时发现一个神奇的现象:判断该表显示不存在,建表时发现显示 表已存在。org.apache.hadoop.hbase.TableExistsException: cash_log:op_info查看hdfs文件发现该表数据不存在。 查看 zk显示该表 meta信息存在。 要做的 就是在zk上使用rmr /hbase1/table/cash_log:op_in...原创 2018-09-05 16:21:01 · 2897 阅读 · 0 评论 -
Java源码之ThreadLocal
前言 很早之前就知道使用ThreadLocal解决多线程并发的问题,可是却一直知其然不知其所以然。这几天在github上看dubbo的提交记录时,无意中发现了前师兄提交的记录,其优化后的ThradLocal性能提高了几十倍(原理在最后我会说一下),最后发现这位师兄也是借鉴了netty的FastThreadLocal。一直很崇拜这位刚刚毕业三个月就在网易就职高级Java工程师的师兄。为了向这...原创 2018-07-05 18:25:42 · 646 阅读 · 0 评论 -
ZTree自定义icon
在写一个界面,用到了ZTree插件。 我的目录分类有:大目录,小目录和文件。默认的ZTree并不满足我的需求,就需要一些定制化的开发。增加变量在jquery.ztree.core.js文件里有一个变量组,分别表示打开的文件夹,关闭的文件夹,文件。 _consts = { ... folder: { ...原创 2018-06-11 19:43:35 · 7714 阅读 · 5 评论 -
hbase实时优化思路
问题的提出 基于hbase的实时架构图如上图所示(也有其它基于TiDB的毫秒级别的实时,这里属于伪实时H+1)。 目前报表的H+1任务的数据都是通过读取binlog消息存入导hbase的。在对这些数据做计算需要在hive上,此时也就需要把数据从hbase导入hive中。最后通过一系列计算把结果export到指定数据库.在hbase->hive的过程中使用的方法为:现在的实...原创 2018-06-07 20:02:39 · 2790 阅读 · 0 评论 -
Java设计模式(二)回调模式
在学习Java的路上很早很早就接触了回调,比如:JFrame的键盘事件,JFrame控件的点击事件,线程池执行之前的方法beforeExecute与执行之后的方法 afterExecute,线程的Run方法其原理就是使用了回调。之前一直没有研究过其原理,在这里学习一下回调模式,也方便理解事件监听模式和观察者模式。回调模式 在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传...原创 2018-05-14 14:46:53 · 4889 阅读 · 0 评论 -
Java设计模式(一)适配器模式
一天无意中在github上搜索,发现了在Java领域stars排名最多的一个项目:iluwatar/java-design-patterns 里面总结了许多在我们开发过程中会使用到的设计模式,以前虽然也学习过,可是总很快就忘,在这里打算再一个一个学习一下。适配器模式 适配器,是为了适应两个原本不兼容的接口而诞生的设计模式,用我们的话说就是转接口,或者桥梁,属于结构性模式。适配器有...原创 2018-05-14 10:22:30 · 506 阅读 · 0 评论 -
Failed opening .rdb for saving: Permission denied
关闭redis服务的时候出现了这个异常Failed opening .rdb for saving: Permission denied[814] 20 Jan 11:46:24.764 # Error trying to save the DB, can't exit.查看异常信息发现是:权限不够 不能够保存redis数据到数据库这个时候可以打开我们的redis原创 2018-01-20 13:59:38 · 12196 阅读 · 1 评论 -
线程池(ThreadPoolExecutor)源码分析之如何保证核心线程不被销毁的
今天看到了别人的一个代码,为了实现每小时重启一下MQ拉取消息,他使用的是Thread.sleep(1000*60*60)方法,然后重启MQ。我一看到就非常头疼啊。。为什么要使用这种方式而不使用java的线程池呢?于是我就问他,他说当时为了方便。大家都知道Thread.sleep期间是不会释放共享资源的,会造成死锁现象。然后我就想Thread.sleep可以在睡觉过程中等待被interrupt中断,然原创 2018-01-12 13:29:28 · 10893 阅读 · 8 评论 -
JAVA线程池ThreadPoolExecutor详解
摘要线程池的工作原理构造方法存活时间keepAliveTime存活的时间单位uunit任务队列workQueue线程工厂threadFactory拒绝策略handler任务执行的基本流程向线程池提交任务executesubmit关闭线程池Executors框架newCachedThreadPool造成的oomnewSingleThreadExecutor造成的死锁原创 2018-01-08 14:50:19 · 1577 阅读 · 2 评论 -
MySQL的limit用法和分页查询的性能分析及优化
一、limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。SELECT * FROM table LIMIT [offset,] rows | `rows OFFSET offset ` (LIMIT offset, `length`)SELECT*FROM tablewhere conditio原创 2017-12-20 10:16:44 · 14665 阅读 · 0 评论 -
dubbo入门小案例
背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个原创 2017-12-19 14:21:27 · 5689 阅读 · 6 评论 -
mysql实现ROW_NUMBER() over (PARTITION BY xx ORDER BY ** DESC)
最近HM给XSD一个需求,HM说现在我们的自动调度任务每天都运行了很多任务,而且每个任务又有失败重试的操作。你能给我查找出来今天的所有的失败任务(以最近时间为准)都有那些吗?XSD听到这个问题就愉快的去做了XSD以前写过HIVE脚本,记得有个 PARTITION BY语句 通过 ROW_NUMBER() over (PARTITION BY xx ORDER BY ** DESC) as row_原创 2017-12-08 11:52:50 · 43982 阅读 · 4 评论 -
mysql超时:The last packet successfully received from the server was 172,848,658 milliseconds ago.
今天查询接口报错了。报错内容如下: The last packet successfully received from the server was 172,848,658 milliseconds ago. The last packet sent successfully to the server was 172,848,673 milliseconds ago. is longer原创 2017-11-20 10:41:14 · 15014 阅读 · 0 评论 -
Saving key "/home/ubuntu/.ssh/id_rsa" failed: Permission denied
生成sshkey时权限不够。。 怎么办? 通过ls -ls查看 .ssh文件是属于root用户的。对于其它用户只有执行的操作,并没有读写操作。 那就加上吧。ubuntu@VM-181-46-ubuntu:~$ sudo chmod 777 .ssh然后再执行生成ssh key的操作即可。原创 2017-08-09 11:13:44 · 22015 阅读 · 3 评论 -
GitHook+JGit实现最新代码的自动克隆或者项目的自动部署
需求思路开工设置webhook响应webhook的服务器http接口clone和checkout操作遍历本地仓库IO流读取内容运行结果需求 分析师写的sql需要映射到另外一个后台系统报表中,由于要经常进行sql优化,需要经常修改sql,而有时候由于马虎sql也会写错,而此刻以前的sql也忘记了,难以维护,所以决定把sql托管在gitlab上。 需求就是保证后台系统的报表s原创 2017-08-08 20:23:52 · 4803 阅读 · 4 评论 -
我在杭州找实习的那些天
背景故事杭州之旅面试第一天面试第二天面试第三天面试第四天丰硕的果实个人面试总结部分面试题不知不觉实习近一个月了。好久没发博客,趁着今天回来的早就写一下我找实习工作的经历。最后我会附上一些我面试期间问到的面试问题。背景故事我目前就读于河南省信阳师范学院计算机与信息技术学院2014级,在大一的时候我就决定了不会考研,于是早早就计划着不考研自己应该做什么。由于我选择的方向是java开发(原创 2017-08-06 15:38:42 · 5699 阅读 · 14 评论 -
关于外网如何访问内网资源的解决办法
前两天旁边的小伙伴给了我一个需求,让我来解决它。为了锻炼自己也就接受了。需求项目中有一些内容的配置在前端和后端都是写死的,而且这些内容是需要经常修改的,所以就导致了每次内容的修改都要重新、修改部署项目。为了方便,决定从公司内部的wiki资源中爬取这些内容。我觉得挺简单的,也就接受了。解决办法在后端写一个定时任务,定时爬取wiki上的内容。由于这些内容较少,没有放在缓存中,暂时就放在内存中。在后端原创 2017-07-21 21:13:25 · 11356 阅读 · 2 评论 -
springboot定时任务的使用
有一个需求是需要从公司内网获得某些信息,由于需要定时爬取就想到了定时器。 以前曾经用过spring-quartz定时器,现在用的springboot好像自带了一个微型的spring-quartz定时器Scheduled. 使用如下:@Component@EnableSchedulingpublic class TestScheduled { @Scheduled(cron = "0/原创 2017-07-21 16:52:43 · 1055 阅读 · 0 评论 -
使用springboot时*mapper.xml无法加载的问题
由于公司里所有的项目都是springboot没办法 只能学习了 在整合mybatis时发现我配置的mapper并没有加载 我已经在application.yml中配置了路径,还是无效果mybatis: mapper-locations: "classpath*:mybatis/*.xml"后来问了师兄发现在创建springboot项目后会生成一个*application.class类。在原创 2017-07-15 10:04:04 · 43641 阅读 · 9 评论 -
git命令
pwd 显示当前路径git init 将当前目录变为git可以管理的仓库ls -an 查看隐藏目录git config user.name "xiaousda"git config user.email "xiaosuda@2dfire.com"git add *添加文件到仓库 分两步:1.git add 2.git commit -m "提交说明"原创 2017-07-15 09:57:04 · 675 阅读 · 0 评论 -
springmvc+jersey实现图片跨服务器上传到并回显
需求所需jar包springmvcxml开启文件上传简单上传界面ajax提交图片表单UploadController测试struts2都支持文件的上传,更好的springmvc当然也支持了~ 这里就来用一个小例子来实现需求上传图片,图片里面回显。 使用Ajax可以实现页面不刷新图片回显。所需jar包由于此案例是文件的上传,所以除了springmvc本来的jar包外还需要:文件上传原创 2017-06-14 20:19:55 · 3811 阅读 · 0 评论 -
mybatis逆向工程
什么是逆向工程mybatis提供了一个逆向工程工具,通过逆向工程,可以帮助程序员根据单表来生成po类、mapper映射文件、mapper接口。下载逆向工程https://github.com/mybatis/generator/releases/tag/mybatis-generator-1.3.2创建逆向工程 由于是从数据库中读表,jar包肯定少不了数据库驱动包~添加generatorConfi原创 2017-06-12 21:52:17 · 1843 阅读 · 1 评论 -
htmlunit+quartz定时抓取博文并生成jsp页面
前言分析网页页码分析文章链接分析文章内容分析io流生成jsp页面squarz设置定时抓取前言看视频看的累了 写写博文~ 很久以前就想有个自己的博客。csdn很好,可是我不是专家啊,还是功底不够, 没有权限,也就不能实现自己的一些想法。所以就百度了一个静态模版。有了模版,问题来了。是个空壳子啊,没有任何内容,所以就想着爬取自己csdn上面的所有文章并生成相应的jsp页面保存到本地,而原创 2017-06-07 21:59:19 · 2318 阅读 · 1 评论 -
清除position:relative占用的空白
div等块级元素设置为position:relative后,原本的位置还会存在空白区域。看起来非常难受(它还占我的空间,我的其他元素就会被挤走)解决办法: 父级元素设置为position:relative,然后为这个元素设置为position:relative; 完美解决。。我觉得我已经偏离了我后端的道路。。。 就当是了解一下~ 遇到问题了总不能不解决是吧~原创 2017-06-03 10:55:29 · 20863 阅读 · 4 评论 -
Spring-Quartz定时器的使用
发发牢骚好久没发博客了 一直在忙而已。 既然想做程序员没有自己的博客怎么可以呢 ?于是我就百度找了一个前台的静态模版,无奈于里面没有博文,于是就是用爬虫爬取了自己的csdn文章,并且生成网页。 暂时的效果如下: 具体也快完成了,就剩下一些小细节处理了。 由于现在的云服务器配置太低(学生优惠版)没钱买。。还是继续在csdn写文章,所以就出现了一个问题,我不能自己每天手动的爬取我的文原创 2017-06-02 11:08:52 · 2712 阅读 · 0 评论 -
解决HibernateTemplate无法根据hql批量删除的问题
由于某些原因我要在写入一个表数据前清空表内的所有内容。 可是发现HibernateTemplate的delete方法并不支持hql语句,百度搜索更是没有发现合适的解决方法。然后查看HibernateTemplate方法发现了一个execute方法,要实例一个HibernateCallback接口。 由于spring封装hibernate后的HibernateTemplate灵活性不足,所以我们可原创 2017-05-31 10:47:26 · 3106 阅读 · 0 评论 -
goeasy+jquery+ckplayer实现动态实时视频弹幕
- 由于是实时弹幕,所以需要时时刻刻读取数据库内容,可是大量的ajax请求会影响服务器性能。于是就使用了goeasy第三方实时消息推送框架。 - 弹幕的动态化可以使用jquery的animate动画来实现.弹幕的位置和颜色,随便一个随机数就搞定啦 - 至于把弹幕消息发送到数据库就更简单了 ,随便一个请求就可以了 - 最重要的就是视频插件了,这这里我使用的是ckplayer网页视频播放器,觉得很简单实用。 ..原创 2017-05-22 12:07:05 · 14291 阅读 · 15 评论 -
struts2声明式验证input视图跳转到另外一个action后错误提示不显示解决办法
在做一个小小的留言板。偷的别的人的静态页面。。无奈前端功底不够啊 在用户发表主题后想要验证一下标题是否为空,就使用了struts2内置的声明式验证(基于xml配置验证)。<validators> <field name="title"> <field-validator type="requiredstring"> <message>标题不能为空!!</me原创 2017-05-20 12:29:12 · 2375 阅读 · 2 评论 -
数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
一、数据库事务隔离级别数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。√: 可能出现 ×: 不会出现脏读不可重复读幻读Read转载 2017-05-14 19:47:43 · 3587 阅读 · 0 评论