- 博客(42)
- 资源 (2)
- 收藏
- 关注
原创 如何优雅地实现Controller返回数据格式的统一
如何优雅地实现Controller返回数据格式的统一在controller里面,我们可以这样实现返回格式的统一@ResponseBody @RequestMapping(value = "saveReferenceInfo", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) ...
2019-11-07 16:31:20 1299
原创 怎么用Navicat连接Oracle[附下载链接]
怎么用Navicat连接Oracle需要材料instantclientnavicat注意版本一定要匹配,我找了很多版本,最后找到了个匹配的设置方法打开navicat ->工具->选项->环境->OCI环境一栏->设置oci.dll路径下载地址我把这个navicat 和 oracle的客户端都打包了,点击链接就能下载下载Navicat下载Nav...
2019-10-29 15:50:47 953 2
原创 如何设计一个比较通用的爬虫系统
如何设计一个比较通用的爬虫系统文章目录如何设计一个比较通用的爬虫系统背景介绍页面差异结果集不同要发送哪些结果给用户怎么发送这些数据给用户项目依赖介绍表结构代码类间关系操作流程背景介绍最近老大让我设计一个爬虫系统,主要流程就是用户输入关键字,然后去指定网页去检索结果,并且对结果进行保存,然后把结果发送给指定用户。根据老大的这个需求,我想了很多事情。页面差异首先,这个爬虫解析数据部分肯定要...
2019-09-27 17:50:32 1339
原创 怎么用okhttp获得响应头数据
怎么获得响应头数据文章目录怎么获得响应头数据背景简单分析接下来就是代码实现背景百度搜索结果,但是真实的url被百度加密了,假如我们需要获得真实url需要怎么处理呢?带着这个疑问,我在chrome浏览器里看了下简单分析这是百度加密后的urlhttp://www.baidu.com/link?url=zHfvhKsuV2gzGWyuGeVuSfhZ8kLerKc5oMYBeodhkBfCc...
2019-09-23 10:45:51 4969
原创 设计模式-桥接模式
设计模式-桥接模式文章目录设计模式-桥接模式模式介绍类间关系代码实现一些总结模式介绍桥接模式用于分离要做的功能和具体实现,从而让各个模块独立出来。接下来我们看一个例子,假如我们有一个机器人,这个机器人能够动手指,能够跑步,以及思考。假如我们不用桥接模式,普通的写法就是把动手指的实现写到和机器人写到同一个类里面,这样的话,以后我们要调整实现的话,每次都要修改机器人里面关于动手指的实现。假如我们...
2019-07-17 18:13:12 146
原创 设计模式-适配器模式
适配器模式文章目录适配器模式简单介绍继承关系代码实现简单介绍适配器模式用于解决两个不同对象之间的兼容问题。比如我们要对接第三方服务,他们的传递过来的数据和我们使用的数据之间是不兼容的,这就需要我们加一个中间层来处理兼容问题。我们需要把我们的数据提取出来,然后拼接成他们想要的数据,请求他们,然后从他们的服务获得结果,然后解析结果,更新我们的表里面的数据。在我们的生活中,很多地方都用到了适配器模...
2019-07-16 17:41:47 146
原创 单例模式,一种防反射攻击的写法
单例模式,一种防反射攻击的写法文章目录单例模式,一种防反射攻击的写法介绍代码实现介绍单例模式一般用于只需要一个对象的场景,必须http请求工具类,我们不需要多个,就可以用单例的写法代码实现public class UtilSync { private static UtilSync sync; private UtilSync(){ System.out....
2019-07-11 23:29:16 183
原创 Spring Boot 定义拦截器,拦截所有执行的sql
Spring Boot 定义拦截器,拦截所有执行的sql文章目录Spring Boot 定义拦截器,拦截所有执行的sql代码实现一些说明代码实现import com.alibaba.fastjson.JSONObject;import org.apache.ibatis.executor.statement.StatementHandler;import org.apache.ibat...
2019-07-09 21:42:55 8643 2
原创 设计模式->建造者
建造模式文章目录建造模式建造模式介绍代码实现建造模式介绍建造模式的核心就是不同对象的组合代码实现食物接口public interface IFood { void eat();//吃 double getPrice();//获得价格 FoodEnum getFoodType();//获得食物类型,便于后面强转}甜品接口public interface I...
2019-07-09 10:17:28 115
原创 synchronized 的使用以及底层简单分析
synchronized 的使用文章目录synchronized 的使用实例级别静态方法级别代码块级锁实例级别public class UtilInstance { private int num; public synchronized void pp() {//这是实例级别的 num++; System.out.println("pp ...
2019-07-08 17:42:31 118
原创 自己实现一个DB工具类实现ResultSet解析成List<T>
今天无聊,然后封装了一下DB的工具类,这个工具类主要作用就是解析ResultSet然后通过反射封装成List<T>我们来看看效果吧 这就是最终的结果 我们传入数据库配置信息,然后传sql和类来获得一个List 我们来看看代码吧 首先是构造方法, //加载配置文件,获得链接 public DBUtil(String pr...
2018-12-08 20:40:35 606
原创 二叉树原理及实现
完整代码在这里 https://github.com/zhangjunapk/half_search_tree 树被广泛使用,比如文件系统,unix上用到了红黑树,windows上用到了树二分查找树可以说是一个有序的集合,节点之间用链表链接起来,可以用二分搜索的方式来对搜索二分查找树在写入上做了一个性能的权衡,每次写入数据都要遍历,然后放到合适的位置是一种很平衡的数据存储结构...
2018-11-05 00:24:38 4211
原创 EhCache 核心功能实现
刚才我弄了一下EhCache底层有用链表实现的,并且默认使用lru算法来提高效率,当把元素放进去的时候,会先放到头部链表然后在使用数据的时候,会从头部查找这个数据,然后把找到的数据放到头部,然后返回并且还会开启线程来定时从尾部清理节点 看代码吧public void put(String key, Object val) { if(headNo...
2018-10-12 22:44:44 499
原创 我是怎么封装poi工具类的
今天我封装了一下POI工具类可以用这个工具类解析xls并生成List可以通过list和标题来生成xls文件 首先是生成xls文件的部分public static <T> void generateXls(OutputStream os,String title, Map<Integer,String> titleMap, List<T> ...
2018-10-12 20:31:44 1378
原创 手写快速web开发框架--集成定时任务
今天写的东西有点多,集成了RabbitMQ/定时任务到手写的web开发框架里,并且写了定时任务热部署接下来看定时任务的集成首先你懂得,定义一个注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Scheduling { String cron();}...
2018-09-22 22:46:12 538
原创 手写快速Web开发框架--集成RabbitMQ
#最近难得有空,然后试着集成了下RabbitMQ###完整代码在这里 https://github.com/zhangjunapk/WinterBatis先看下效果,访问这个路径能发送消息,然后消费者能消费消息 ##首先定义注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)publi...
2018-09-22 15:38:16 431
原创 OkHttp+Jsoup爬Boss直聘招聘信息
OkHttp可以向指定链接发送请求,然后获得响应,Jsoup可用于解析html,Jsoup强大的地方是Select方法,可以通过传入元素选择表达式来获得元素谷歌浏览器有个功能可以获得元素选择的表达式 这样就把选择元素的表达式复制到粘贴板了接下来看代码实现 因为我创建的是maven项目,我们可以再pom文件中添加依赖 <dependency&g...
2018-09-09 20:07:11 1566 1
原创 RPC(远程过程调用)
当我们的web系统很大的时候,我们就需要使用分布式框架分布式框架都用到了RPC可以让客户端像调用本地服务一样调用远程服务其本质是通过Socket链接服务端, 然后向服务端发送需要调用的服务的接口然后服务端向客户端返回实现了接口的对象客户端就直接调用了 我们看一下最终效果 IStudent invokeServer = new ServerInvoker&...
2018-08-05 23:39:42 213
原创 js代码执行问题
今天我遇到一个js代码的执行问题,上代码$("#primary_menu .nav-menu").append("<li class=\"\">\n" + " <a href=\"//category/"+data+"\">\n" + " &
2018-07-03 00:57:14 193
原创 java web 实现文件夹上传(保留目录结构)
今天我弄了一下文件夹上传(很简单的)首先,我们的html需要这样写<form action="/file/upload" enctype="multipart/form-data" method="post"> <input type="hidden" name="type" value="1"/> <i
2018-06-04 23:11:07 13598 18
原创 HashMap底层分析以及手写实现
HashMap平时我们都在用,底层效率挺高的我对HashMap的理解就是使用了数组+链表的结构当我们插入数据的时候,通过传入的key的hash来计算应该放的位置 如果计算出来的索引有数据了,就遍历其下的链表 如果链表中有key与传进来的一致,就改掉当前遍历到的节点的value 如果遍历到最后也没有key一致的节点,就添加节点到最后 如果计算出来的索引位置中没...
2018-05-26 21:43:40 285
原创 手写代码实现逆生成Bean
今天我写了个小工具,可以通过数据库中指定的表生成Bean整体流程:1.设置数据库连接 url,username,password,Bean要放的包名,以及表名2.然后遍历表名List,执行select * from 表名方法3.每次执行语句,我们都获得metaData,然后获得每个字段的类型和名称4.我们需要根据metaData中获得的int 类型值进行判断,并放到容器中5.然后把表名作为key,...
2018-05-26 21:32:26 313
原创 Queue队列的分析以及手写实现
今天弄了一下队列,使用链表实现队列对高并发帮助挺大的,弄成请求队列 。哈哈我理解的队列是先进先出,就像排队一样接下来是代码实现我们需要创建一个节点类package queue;public class Node<T>{ Node<T> last; T val; Node<T> next; public Node() { ...
2018-05-22 00:02:16 819
原创 ArrayList底层分析及手写代码实现
刚才我写了个ArrayList的小demo我对ArrayList的理解是可以放任意类型进去,然后可以进行动态扩容接下来就放上我写的代码public void add(T t){ if(!checkSize()){ capacity(); } list[lastIndex++]=t; System.out.println(lastIndex);}数据...
2018-05-20 22:57:39 148
原创 mybatis 入门教程
今天,我捣鼓了下mybatis-------------------------mybatis环境搭建-------------------------我用的idea首先需要创建maven项目然后在pow.xml中加这些来下载依赖<dependencies> <dependency> <groupId>org.mybatis</gr...
2018-03-10 22:34:39 181
原创 Spring aop入门
Spring 的 AOP挺牛逼的,今天我就简单使用了一下----------------------什么是 AOP----------------------我理解的AOP就是使用动态代理,将业务逻辑和一些杂碎的事情分离开,让开发者专注于业务逻辑的开发----------------------为什么要用AOP----------------------假如我们要写...
2018-03-09 23:54:16 230 1
原创 记一次坑爹的事情
今天我在写安卓练手写了个RecyclerView通用的Adapter可是死活不显示啊急死我了 搞了大概两个小时最后发现是方法弄错了我没注意看,写到这个方法里了public class Music extends AppCompatActivity{RecyclerView recyclerView;List list; @Override
2017-11-19 02:00:04 234
原创 基础算法练习
题目:随机生成一个从0~10000的数字,如果不足5位,请用0来补上比如 235 变成00235我的思路:从左往右取得数字,如果不为0,就说明我们已经得到了所有的需要补的0的个数,不然就表示个数的变量自增1说起来抽象,直接上代码public static void showN() { Random rand = new Random();
2017-11-02 22:40:29 287
原创 二维数组逆序
今天,我弄了弄二维数组逆序来练习我们需要从后往前遍历二维数组,并将里面的元素放到一个新数组// 二维数组逆序 public static void outOf() { int[][] old = { { 31, 32, 48, 37 }, { 41, 30, 97, 73 }, { 13, 34, 92, 37 } }; int[][] newa = ne
2017-11-02 22:35:43 4157
原创 for 语句的更多细节
for 语句public class Test { public static void main(String[] args) { int x = 2,y=3; switch(x) { default: y++; case 3: y++
2017-10-16 22:51:23 169
原创 java 引用细节
今天,我在《java编程思想》上看见一个例子,这个例子向我展示了一些关于引用的细节接下来是具体的代码:class Tank{ int level;}public class Assignment { public static void main(String[] args) { // TODO Auto-generated method stub
2017-10-09 22:53:54 162
原创 经典面试题
今天,我看见一道题,特别有趣public static void main(String[] args) { int a=4; System.out.print((a++)+(++a)+(a*10)); }求输出什么最开始,我从左往右依次加上去发现结果是49,后来运行发现结果是70后来想了一下,发现了一些关于操作符的运算细节
2017-09-30 19:46:50 180
原创 二分查找
今天,我学习了二分查找得益于二分查找的实现原理,它的效率很高在使用二分查找前,需要对数组进行排序实现原理是这样子的:假如我们要查找数组中其和为指定数字的两个元素我们先检测0下标和最后一个下标的和如果等于就输出,大于就把right 的index左移一半,小于就右移一半,就这样不断递归调用(注意栈溢出)描述起来有点抽象,我们直接上代码import java.securi
2017-09-19 23:59:21 256
原创 Activity传递Binder给Fragment
最近我在做一个音乐播放器练手,遇到了Binder传递问题我有个Activity,里面有个ViewPager,Viewpager里面放的Fragment,然后我想在Activity中绑定服务,然后在Fragment中接收Activity传递的Binder对象我们可以在Fragment中使用Activity中对Fragment使用SetArguments(Bundle
2017-09-04 22:01:01 955
原创 矩阵压缩
我们可以通过压缩矩阵来节省资源//矩阵压缩算法//将矩阵压缩成另一个矩阵//另一个矩阵第一行存储了之前矩阵的行数 列数 以及非0元素个数//然后每一行都保存了非0元素的行数 列数 及元素值public class Main {public static void main(String [] args){ int[][] data={ {0,0,0,0,0,0}, {0
2017-08-23 21:49:26 857 1
原创 安卓学习笔记 6-14 排序
刚才我在等人的时候,在手机上写了个很简单,且效率不高的排序算法int [] ints={1,4,2,8,10,5,13,20}; public doOrder(int[] ints){ int small,big;
2017-06-14 13:07:41 221
原创 安卓学习笔记 6-13 插件化开发(换肤)
插件化开发比较流行且易实现的用法是切换主题首先,我们需要对布局进行监听,不然用户可能在更改主题后,下次进入app会看见原始的主题变成之后的,影响体验我们来写一个类,继承自LayoutInflaterFactory可以看到,最终它返回了一个view,我们需要在onCreatView方法里对view进行主题切换,并将这个view返回当我们写好这个类后,可以通过下面的方法
2017-06-13 23:16:40 257
原创 安卓学习笔记 6-12 FFmpeg解码
今天我学习了FFmpeg解码首先,我们来看一下解码流程我们先注册组件,然后打开视频文件视频播放需要通过解码器进行,我们来获得解码器
2017-06-12 22:27:41 189
原创 安卓学习笔记 6-11 增量更新
如今app容量越来越大,为了减轻服务器流量消耗成本以及用户流量费越来越多的APP使用增量更新技术来迭代版本具体操作也就三步1.通过bsdiff生成差分包2.获取 /data/app/包名下的apk,然后与差分包合并成新的apk3.然后安装
2017-06-11 22:45:26 159
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人