- 博客(164)
- 资源 (25)
- 问答 (1)
- 收藏
- 关注
原创 kafka通过java api 获取当前消费组offset/logsize/lag信息,实现消费延迟监控
一般监控kafka消费情况我们可以使用现成的工具来查看,但如果发生大量延迟不能及时知道。所以问题就来了,怎么用java api 进行kafka的监控呢?用过kafka都该知道 延迟量 lag = logSize(topic记录量) - offset(消费组消费进度) 所以我们获取到logSize / offset 就可以了。鉴于这部分信息网上资料非常少,特地将代码抛出来。我使用的...
2018-04-11 14:02:03 23634 13
原创 代理模式 - spring aop 抛砖
一、什么是代理模式 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方 法。 举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目 的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决.这就是代理思想
2017-12-21 12:14:27 2515
原创 使用aop代理获取不到Annotation注解问题
问题场景:使用aop切面方法执行一些业务,过程中查看执行的方法是否有一个自定义的注解,有的话做其他的操作这里碰到了一个问题 ,执行的方法有注解,但是通过Annotation an = method.getAnnotation(UserChangeLog.class); 取值为null.具体情况和此篇文章类似:示例其实问题很简单,是代理对象和目标对象的问题,通过代理模式生成代理对象上的方法不会有注解
2017-12-19 14:29:54 10897 8
原创 Java面试之路(二)数据库部分
由于本人只用过mysql数据库,所以本文整理的面试题也是基于mysql数据库的。 画外音:以前一直觉得为什么面试非要问你原理性的东西呢,开发的工作是利用我们学的去创造一些东西,能达到目的不就行了,为什么买个车还要知道车轱辘是怎么造的? 最近面试的几天,我慢慢明白了,一方面你对一个工具了解的多,更容易避免一些问题或想到一些更好的方法,另外一个很重要的方面,面试官可能想间接的了解你平日的工作情况,除
2017-11-18 21:57:52 2431
原创 Java面试之路(一)Java基础部分
引言最近辞职,开始了一轮又一轮腥风血雨的面试,开个专栏,记录下面试中的各种疑难杂症问题,面试的公司有58企服、便利蜂,美团等,给大家分享下。专栏将分为几部分:java基础、数据库部分、分布式架构中间件部分、网络及算法部分。本篇来说下基础部分。博主刚毕业一年,加上大四一年外包经验,工作两年,本以为面试应该比较轻松,面了发现还是挺难的…… 可谓雄关漫道真如铁,而今迈步从头越,从头越,苍山如海,残阳如
2017-11-17 15:55:10 2452 1
原创 使用junit进行多线程并发测试
没使用过junit的,请看上篇博客。 这篇讲一下如何使用junit进行多线程并发测试 ~ 实际上junit是不支持多线程的,你可以试试,在test方法里面new个 Thread ~ 会报错 ~ 那你会问我在这还扯什么犊子 ~ 我当然不是在这扯犊子了~~ 有插件 ~~ 对,有插件!<!-- 包依赖 --> <dependency> <groupId>junit</grou
2017-08-24 15:06:38 13323
原创 使用junit进行集成spring项目的单元测试
本文介绍下项目集成spring,如何使用junit进行单元测试。 我们知道spring的项目测试时可以手写一个main方法,用ClassPathXmlApplicationContext 或 FileSystemXmlApplicationContext读取配置文件,然后实例化bean进行测试,类似下面这样:ApplicationContext factory=new ClassPathXml
2017-08-24 14:51:30 2679
原创 使用redis实现分布式锁
在高并发、分布式部署的场景中,为保证数据的一致性,常常会用到锁。举个例子,在修改金额这种比较敏感的数据,同一时间只能允许一人操作,如果有两人同时进行一条数据的修改,一个增加金额,一个减少金额,这时就很可能出现数据错误了。如果是单机操作,我们可以使用Synchronized同步实现锁,但对于集群分布式操作,Synchronized就鸡肋了,需要寻找别的方式来解决。分布式锁的实现基本有三种方式:基于数
2017-08-24 11:55:17 1916
原创 JVM性能调优(一)
JVM参数:实例 : -Xmx4g -Xms4g -Xmn512m -Xss1m -XX:PermSize=512m -XX:MaxPermSize=512m1 -Xmx – 堆初始值 2 -Xms – 堆最大可用值 3 -Xmn – 新生代大小 4 -Xss – 栈空间大小 5 -PermSize – 永久代初始值 6 -MaxPermSize – 永久代最大值 注意: ① java
2017-06-23 14:55:03 2418
原创 项目发布docker后,请求获取不到参数
docker tomcat get 问题: post请求获取不到参数,get请求受传输字符限制,也获取不到参数、 解决方法: 修改tomcat server.xml 文件,通过shell脚本上传到docker容器,替换掉原来的文件 RUN rm /data/tomcat7/conf/server.xml ADD shell/server.xml /data/tomcat7/conf
2017-04-07 17:34:11 3564 1
原创 消息队列kafka java API, 新版旧版消费代码
一、kafka / zookeeper环境配置(mac下可以使用以下进行配置)安装zookeeper :brew install zookeeper启动zookeeper:zkServer start 安装kafka:brew install kafka启动kafka服务:kafka-server-start /usr/local/etc/kafka/server.propert...
2016-12-09 17:21:40 6833 2
原创 SpringMVC通过@Value读取配置文件
spring中配置:<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>
2016-11-21 17:20:58 2614
原创 常用git命令
git 操作 * git branch #查询所有分支 * git branch aaa #创建本地分支aaa(创建分支时必须要切到master) * git checkout aaa #切换到分支aaa * git push origin #本地:远程 将本地分支aaa推送到远程分支aaa,如果没有此远程分支则会自动创建 * git branch -d aaa #删除本地分支aaa
2016-11-18 10:27:41 3732
原创 mac idea配置maven项目
一、首先需要在本机安装maven插件(类似于tomcat的 zip包),然后设置maven环境变量 设置方式:点击 二、idea配置 -Dmaven.multiModuleProjectDirectory=$M2_HOME
2016-09-26 15:43:35 3747
原创 mac配置java/maven等环境变量
mac安装java后是不需要修改环境变量的,会自动配置,但是如要更改,可以使用vi编辑器: 打开终端,输入 vi .bash_profile 进入后是命令模式,点击 i 进行编辑, 输入:export M2_HOME=/Users/D_xiao/work/java_tools/idea_apache-maven-3.3.9# maven bin所在的目录export M2=$M2_HOME
2016-09-26 15:38:58 2971
原创 Mac下eclipse安装svn插件
在mac上安装svn真是费了老劲了,简直无语了。 终于装上了。分享一下方法~ 希望对后面用到的朋友有些帮助~
2016-08-24 23:17:44 4742
原创 js正则表达式使用
如上图所示,通过 //.test()来使用正则,图中第一个正则表示匹配中文。 同时正则可以在replace/split等方法中使用。 测试js正则可以直接在浏览器开发者工具中测试,即f12控制台中。
2016-08-02 14:02:51 2161
原创 利用java反射将map值封装到对象中
有时候我们需要将map里面的值依据键依次封装到对象里面。 这时需要简单的用下反射。 例子如下:public void newLoadFromMap(Map<?,?> map) throws IllegalArgumentException, IllegalAccessException{ try { Field[] fields = this.getClass()
2016-07-28 14:56:30 5640
原创 使用spring quartz实现任务调度(注解方式)
任务调度的意义就不多说了,无非就是个定时任务。这里写一下使用spring quartz注解方式更方便的实现任务调度:1⃣️配置文件注入定时器,添加schema标记: 注:这里的id什么的随便写就可以的,和你的任务类没有关系,这段配置复制粘贴就好。 2⃣️编写任务类:@Component("hotelTask") public class HotelTask {@Schedu
2016-07-21 00:13:54 3922
原创 spring中使用多线程
我们知道创建多线程有两种方式。 1⃣️实现runnable接口 2⃣️继承thread类 但执行多线程前必须要实例化对象,然后调用start方法才能执行。我们知道spring通过ioc创建实例,对象被动注入到你需要使用的类中,而且,spring创建对象默认是单例的。那么该如何操作呢?方法很简单: 1⃣️首先我们需要创建自己的线程类,也就是你要并发执行的任务: 就像下面这样:@Compone
2016-07-21 00:06:20 4672
原创 mysql常用函数整理
mysql常用函数: 1⃣️concat(str1,str2,str3…) 同一条记录中多个字段进行连接 2⃣️group_concat(字段名) 一对多关联查询时,如果返回一条记录对应另外一张表多条记录,需要将那张表其中一个字段所有的值,可用这个函数进行连接,默认用逗号隔开 3⃣️DISTINCT(字段名) 关联查询时,如果查询一个字段中对应多个值,要让里面的值不重复,可以使用这个函数
2016-07-19 00:17:03 2188
原创 mysql left join 左连接查询关联n多张表
最近用mysql 多表关联查询比较多,特此总结一下left join用法,拓展下left join将多表关联。left join 左连接即以左表为基准,显示坐标所有的行,右表与左表关联的数据会显示,不关联的则不显示。关键字为left join on。 **基本用法如下: select table a left join table b on a.id = b.ta_id**注意:1⃣️其中on后
2016-07-19 00:06:52 31004
原创 org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias
使用hibernate查询时,写纯sql语句进行查询,sql放到数据库中直接执行没有问题,通过hibernate调用时却报如下错误: 问题解决: sql中重复使用的字段名称必须要起别名!不管你需不需要用到这个别名,都要写,要不然hibernate区分不了这两个属性。我的sql及解决方法如下:
2016-07-17 20:18:07 4711
原创 Mysql快速插入千万条测试数据
通过存储过程来添加数据:drop procedure if exists t1;create procedure t1()begin DECLARE i INT DEFAULT 0; DECLARE j INT DEFAULT 0; WHILE (i <= 15000000) DO INSERT INTO `test` (`code`, `name`) V
2016-03-10 15:26:19 5267 2
原创 mongodb 添加用户报错TypeError:db.addUser is not a function
原因是 新版的mongodb已经不支持addUser方法了。 改成createUser了。 使用方法如下
2016-02-25 10:15:20 15262 2
原创 关于i++ 和 ++i
public class Test_i { public static void main(String[] args) { int i = 0; System.out.println("运算前i为"+i+"执行"+ i++ +",此时i为"+i); System.out.println("运算前i为"+i+"执行"+ ++i +",此时i为"
2016-02-19 09:23:56 3990 2
原创 Mongodb嵌套文档的修改-利用数组修改器更新数据
初学mongodb的可能和我一样有个疑问,mongodb是文档型的,那么如果一个文档嵌套另外一个文档,如果对这个嵌套文档进行增删改查呢。 就像如下这样:,如何对auther里面的name进行增删改查呢?这篇博客我们一起来看一下。这里要用到几个修改器:$push,$pop,$pull首先增加一个name:db.myFirstCollection.update({_id:1},{$push:{"a
2016-02-18 10:29:59 7980
原创 mysql 各种实际常用疑难sql整理
① 按天、月做统计,需要每天的走势变化。 sql查询到每天(每月)的值为之前所有值的和 实现如下: 通过op_time与a.op_time比较实现select DAY(op_time),(select sum(price) from t_margin_profit where day(op_time)<=day(a.op_time) and year(op_time) = '2
2016-01-27 13:47:31 1547 2
原创 mysql 中的case when 和ifnull判断
mysql 在查询和更新sql中都可以进行判断,下面根据我这两条sql看下case when和ifnull的用法:case whenupdate t_tradefee set margin_profit = (case when market_price is null then (2.3-basic_fee)*remain_amount else (2.3-market_price)*rem
2016-01-27 10:02:48 4746 2
原创 mysql 触发器开荒
mysql触发器平常没怎么用到过,这次用到了,感觉特别方便。简单总结一下用法。先看一下我写的这两个触发器:/*更新触发器*/DROP TRIGGER IF EXISTS t_update_on_t_tradefee;CREATE TRIGGER t_update_on_t_tradefee BEFORE UPDATE ON t_tradefee FOR EACH ROWBEGIN
2016-01-27 09:51:34 1464 1
原创 easyui datagrid 动态添加、移除editor
使用easyui 行编辑的时候完成编辑的功能比较简单,但是如果要根据一个框的值动态改变别的值或者编辑的时候禁用某个框的时候就比较麻烦了。 比如像下面这样:添加行的时候每个值都是手动输入,修改的时候第一个值不能修改。我们来看下怎么实现这样的效果。 easyui本身是不提供这么细节的功能的,需要我们自己拓展下: 在编辑的时候移除第一列的editor属性,添加的时候,添加第一列的属性。//扩展dat
2016-01-27 09:44:42 7931 1
原创 easyui datagird 总计栏
在使用easyui 的表格的时,很多时候需要加一个总计栏,当然easyui中有加总计栏的方法,写一个footer就好,然而我觉得这种方法并不好,因为添加的总计栏是和列表每个单元格对应的,有长度限制,不美观。如果你也这样想,可以按我这种方法: 把总计栏写到分页栏里面,这样就可以一行显示啦。 具体方法很简单: 在datagrid的定义后面写一个这个:var pager = $('#dg')
2016-01-05 17:27:05 2070
原创 easyui 客户端分页
easyui 服务端想必大家都已直到了,就是传个rows和page数据库查一下就好了。 而如果只需要客户端分页,请往下看: 首先copy这个方法://easyui前台分页方法 function pagerFilter(data){ if (typeof data.length == 'number' && typeof data.splice == 'funct
2016-01-05 17:16:36 2467
原创 easyui行编辑:利用append row添加行,直接在行中编辑,ajax提交保存
今天工作用到了easyui行编辑,在这里总结一下,不会的同学可以看看,顺便吐槽一下,网上的很多博客都是粘贴复制的,内容很乱 ,而且看不懂,不知道这些粘贴复制的怀的是什么心,不但没用,还影响别人搜索。 呼吁大家在写博客的时候认真一些,别只粘贴复制,至少可以自己运行好了贴上自己的代码和一点感想,对别人用处很大的。好了,正题开始——>我用的是easyui 1.4效果如下: 点击添加按钮,在第二行的位置
2016-01-04 17:35:33 18675
原创 easyui 源码修改,自定义弹窗
easyui中提供了几种弹窗:alert/promte/show/confirm等,但实际需求中这些并不能满足所有情况,比如想要在弹窗中默认显示一些文字、图标,通过传参在具体的位置显示参数。这时就需要修改一下源码,自定义一个弹窗。 首先来看个效果: 调用方法:$.messager.error({ title:'提示', icon:'error'
2015-12-26 16:01:45 3267 2
原创 easyui防止重复提交及进度条报错解决: Cannot read property 'onClose' of undefined
使用easyui框架 有个缺点就是响应有些慢,比如使用dialog 提交表单的时候可能要经过几秒才能提交上,如果用户连续点击提交按钮,可能造成重复提交。有个办法可以解决这个问题,就是使用进度条,也是easyui自带的。像如下这样: $.messager.progress(); var form = $("#addcompany"); form.aja
2015-12-21 17:34:00 4256 1
原创 java中double、float类型计算精度丢失问题
java中计算double、float类型数值,往往会出现计算精度丢失,也就是想下面这种情况: 这时,我我们使用BigDecimal类进行计算即可 这里注意一下,如果实例化a和b时,后面的参数单纯写一个double类型的数值还是不够的,减法计算还可能失去精度,最好的办法就是想图中一样转化成string的,这样就算就不会又问题了。如果还想保留两位小数,可使用如下方式格式化一下 先定义一个
2015-12-18 20:00:57 3070 1
原创 表单提交ajax实现
提交表单常见的几种方式这里总结一下,最平常的直接submit按钮提交就不说了。一、不使用submit按钮的submit提交 这个标题看起来有些别扭,但实际中确实有这样的需求,我们要在提交表单时进行验证,验证通过才提交,否则不提交。可以用下面代码实现: 这是比较基础的一种实现方法。注意这时就不需要再form标签 上加action属性,地址填在这里的url就好。onSubmit是在表单提交
2015-12-18 19:41:54 1897 1
原创 font-awesome图标用法
font-awesome 没用过的可以百度一下,这个网站提供了海量的文字图标,用这个图标的好处一是整套的上千种图标,基本涵盖的所有的需要,二是使用起来非常简单,三不需要引入图片。 具体用法: 首先从官网下载文件zip包,解压后是这样的: 把fonts文件夹放在css文件夹相同目录下(注意一定要引入fonts文件夹!),同时页面引入font-awesome.min.css 然后使用<i c
2015-11-20 19:21:02 2519 1
ssm demo(学生管理系统)
2016-01-10
spring+spring mvc+mybatis+easyui整合demo
2015-10-22
struts2+spring+hibernate整合示例1
2015-09-04
struts2+spring+hibernate整合示例
2015-09-03
dwr相关jar包
2014-09-10
easyUI+jsp电子仓库管理系统
2014-04-15
JDOM jar包
2014-03-26
利用easyui实现简单的用户模块
2014-03-19
easyui+ajax+json+servlet实现用户登录注册简单demo
2014-03-14
Mongodb中如何实现一对多?在一个文档中嵌套多个文档?
2016-01-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人