2019年10月11日

静态代理和动态代理

摘要: 静态代理 代理在开发中非常常见,可以指程序的设计模式也可以指服务器的工作模式。通俗的将,代理就是不能直接访问某个事物时,通过访问一个中间事物,再由中间事物访问目标事物。这似乎是多此一举,为什么要这么做呢?原因也各不相同,可能是客观原因不得不这么做,例如国内访问youtube服务器就必须通过代理服务器 阅读全文

posted @ 2019-10-11 18:04 千山万水楼外楼 阅读(177) 评论(0) 推荐(0) 编辑

2019年10月10日

Tomcat的作用思考及NIO的应用(要区分Java NIO和操作系统的NIO模型)

摘要: Tomcat的作用 平时写完web程序都是直接点击启动,就可以在本机浏览器访问了。但是仔细想想,我们似乎都没有写过浏览器与servlet通信的代码,也没有写过创建request、reponse的代码。实际上,这些都是由Tomcat完成的,它的主要作用如下: 1. 完成服务的与客户端的数据收发,即通信 阅读全文

posted @ 2019-10-10 20:51 千山万水楼外楼 阅读(592) 评论(0) 推荐(0) 编辑

破坏双亲委托机制的一些情况---Tomcat和JDBC,破坏后的安全问题

摘要: 采用双亲委托机制的原因 类加载器就是将字节码搬进jvm方法区的组件。我们知道,JVM识别加载进来的类是通过类加载器+类全名完成的,也就是说同一个类由不同类加载器加载进去的话就会被视为不同的类。jdk提供的类加载器及他们的关系如下: 我们可以自己继承ClassLoader定义多个自己的类加载器,但是这 阅读全文

posted @ 2019-10-10 17:39 千山万水楼外楼 阅读(988) 评论(0) 推荐(0) 编辑

2019年9月5日

springboot cache---本地缓存的使用

摘要: 使用缓存的几个注解 什么时候需要使用缓存呢?一般是在一个方法的返回值需要被频繁用到、但是返回值很少改变而且执行这个方法会消耗较多的时间,这种情况我们可以考虑将返回值暂时存到内存中,需要时通过对应的唯一key获取,从而提高程序效率。与之前类似,使用缓存首先要在启动类上面写上注解@EnableCachi 阅读全文

posted @ 2019-09-05 17:27 千山万水楼外楼 阅读(2265) 评论(0) 推荐(0) 编辑

2019年9月4日

springboot--异步执行的方法及定时执行的方法

摘要: 让方法被调用后异步的执行 一般来说,要异步执行一个任务都是创建一个线程来专门干这个任务。在springboot中有 @Async 这个注解快速实现方法的异步执行。只需要两步:第一步: 在启动类上加上@EnableAsync注解,表示这个程序支持异步的方法。如下: 第二步:在service层的类的方法 阅读全文

posted @ 2019-09-04 16:20 千山万水楼外楼 阅读(4642) 评论(0) 推荐(1) 编辑

2019年9月3日

springboot--事务的使用

摘要: @Transactional原理 事务是一些sql语句对数据库操作的集合,因此如果在一个Java方法里涉及了对数据库的操作,业务需要的话我们就可以考虑把这些操作作为一个事务。通过在方法上加个@Transactional(....)注解即可。 如: 对于springboot,加了@Transactio 阅读全文

posted @ 2019-09-03 18:21 千山万水楼外楼 阅读(303) 评论(0) 推荐(0) 编辑

2019年8月29日

数据结构--堆排序

摘要: 堆是一种特殊的完全二叉树,满足每一个结点的值比左右子树的所有结点都大(大顶堆)/小(小顶堆)。由于是完全二叉树,我们不需要用借助指针来存储树,用一个数组即可。 如 a = [1,2,3,4,5,6]表示的树: a[i] 的左节点为 a[2*i+1],右结点为 a[2*i+2]。所以对一个数组使用堆排 阅读全文

posted @ 2019-08-29 17:56 千山万水楼外楼 阅读(202) 评论(0) 推荐(0) 编辑

数据结构--树的非递归遍历

摘要: 树的递归遍历代码非常简单易懂,但是由于递归会占用非常多的栈空间,因此非递归的遍历树也是必须要掌握的。因此最近仔细分析了很多的代码以及理解了遍历的过程,最后敲一遍并在这里记录一下,以后可以快速回顾。一般来说,递归可以解决的问题也一定可以用栈加循环的方式解决,毕竟递归实质上就是利用了栈嘛。 树从根节点开 阅读全文

posted @ 2019-08-29 17:23 千山万水楼外楼 阅读(1222) 评论(0) 推荐(0) 编辑

2019年8月7日

最长公共子串的长度和构造

摘要: 最长公共子串是两个字符串都包含的一个字符串,需要连续。例如: String s1 : abfc String s2: abcd "abc"是他们的最长公共子序列,但是‘c’在s1中与”ab“不连续,因此”ab“是两个字符串的最长公共子串。 简单总结下思路: 使用动态规划,用一个二维数组dp[i][j 阅读全文

posted @ 2019-08-07 18:04 千山万水楼外楼 阅读(524) 评论(0) 推荐(0) 编辑

最长公共子序列的长度,和构造

摘要: 最长公共子序列即是两个字符串都包含的一个字符序列,但是不需要连续。例如: String s1 : abfc String s2: abcd "abc"既是s1的一个子序列,也是s2的一个子序列,因此"abc"是他们的最长公共子序列。 简单总结下思路: 使用动态规划,用一个二维数组dp[i][j]表示 阅读全文

posted @ 2019-08-07 16:53 千山万水楼外楼 阅读(1246) 评论(0) 推荐(0) 编辑

导航