- 浏览: 47303 次
- 性别:
- 来自: 深圳
最新评论
文章列表
[置顶] 递归转非递归通用模型
- 博客分类:
- 算法
递归转非递归总结:
递归的时候,计算机透明的帮我们做了入栈,出栈等等操作,而且在入栈的时候,还记录了上下文信息,很重要的是记录了当此节点出栈后,应该继续从什么位置进行执行。
若我们自己进行递归转非递归,那么我们就得自己记录上面的信息了。入栈及记录出栈后从什么位置开始执行。
列子:
递归
public class Recursion {
public static int count = 0;
public static int childrenCount = 5;
public static void builderTree(int[] tree,int index) {
if ...
假如一条记录可以用id,idcard,name分别唯一的查询到,
且提供了三个接口(支持上面的查询)
存储映射
key:id idcard name
value:id id id
存储真实值
key:id value:value
需要查询两次(用idcard 与name来查询)
想的是比方用idcard来查询,查询缓存,有值,那么在通过这个值去取真实数据。 第一次取 查询缓存 不存在记录,那么取值,在将idcard与记录标识存起来 在看看记录标识在缓存中是否存在 不存在 则缓存起来
避免多个值被存储,节约空间 ...
import java.io.Serializable;
import java.util.List;
/**
* Created by Administrator on 2017/4/19.
* 这是基于是单线程来执行同步 千万不允许多线程执行 多线程执行太难写了 放弃吧!!!!!
* 这里我们考虑有时间因素、以及mysql mvcc非锁定读的因素。
* 时间因素我们这样解决:1、以主服务器的时间为准。而非本地时间。本地时间快与慢不会影响同步功能
* 2、主服务器可以调整它的时间,可以向前(改小时间)或向后(改大时间)调整,程 ...
Rabbitmq高可用设计思路
设计保证:
1、消息不丢失(将消息存储到磁盘)。Rabbitmq服务器分为内存服务器和磁盘服务器,若你需要你的消息服务器保证消息不丢失,则将消息保存到磁盘,是磁盘消息。
如何将消息设置为磁盘消息 ...
rabbitmq实现rpc调用基本思路:
客户端(client):客户端发起rpc调用,这当成一个消息,发送到rabbitmq服务器。这个消息会携带两个特殊(额外)的信息,一个是调用序号,一个是回调队列名称。调用序号需要服务端原样返回,而回调队列名称是用于服务端将结果放入这个队列中,以便客户端取回结果。
服务端(service):服务端接收到了一个rpc调用后,执行调用代码,将结果返回到指定的回调队列中去。
这里我们可以约定一个数据模型,见代码:
public class RpcInvokeModel implements Serializable {
//真实传输的数据
...
package com.cc.sec;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.web.filter ...
//<!--蒙板-->
var showLoad = '<div id="bigloadGifShow" style="filter: Alpha(opacity=30); -moz-opacity: 0.3; -khtml-opacity: 0.3;position: absolute; left: 0; top: 0; display: back; overflow: hidden;background-color: #000;"></div>';
//<!--弹出层---->
showLoad+ ...
通过修改web.xml让服务器重启的问题?
通过修改web.xml让服务器重启时,项目中开启的线程都不会自动的被关闭,只有你自己去传达web容器关闭事件,通知运行中的线程,让其自动关闭。这里我经常使用的是观察者模式,
代码如下:
监听web容器关闭事件,并自启动一个关闭线程来进行关闭操作,因为web容器的关闭时间是有限的。
public class WebContentClose implements ServletContextListener,Runnable {
@Override
public void contextDestroyed(ServletContextEvent arg ...
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import com.pdy.test.User;
//这就是一个实现了深拷贝的反射
public class UseReflectColne2 {
public static Object clone(Object obj) throws SecurityException, NoSuchMethod ...
package com.hengyunsoft.cryptography.sign.desimpl;
import java.util.Arrays;
import java.util.Random;
import com.hengyunsoft.cryptography.sign.SignReversible;
public class SimpleDesSign implements SignReversible {
//下面这个是秘钥
private byte[] secretKeys = new byte[] {5,62,54,110,26,57,96,41,96,45,12 ...
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
public class ApiInvokeLimit {
private volatile long nextTime = 0;
private final long invetime = 5;
private final int maxCount = 2000;
private ConcurrentHashMap<String,AtomicInteger> appKey2Inv ...
package com.hengyunsoft.test;
import java.util.Comparator;
import java.util.Random;
import edu.emory.mathcs.backport.java.util.Arrays;
public class PriorityArray<E> {
/**
* 当前已用大小
*/
private int size;
private Object[] e;
private Comparator<E> comparator;
public PriorityArr ...
import java.util.LinkedList;
import java.util.Random;
public class ThreadDispatch extends Thread{
//需要暂用几个时间片
private int count;
//是否分配到了处理器标志
private volatile boolean holdCpu;
//暂用的处理器名称
private volatile String cpuName;
public ThreadDispatch(int count,String name) {
super(name);
this.c ...
java读写锁升级与降级、并会发现死锁。抛出异常
- 博客分类:
- java
package com.huawei.test;
import java.util.HashMap;
import java.util.Map;
public class SpinReadWriteLock {
private volatile Thread writeThread = null;
private volatile int writeCount = 0;
//标记已经获取读lock的线程想要获取写lock 但被阻止了(因各种原因)
private volatile Thread readRequestWriteLockingThread = null;
pri ...
定时任务:
1小时一次:
1、商定取值时间:时间 = min(主服务器时间 - 1小时5分,上次商定的时间 + 1小时)
这里的5分钟我考虑的是最大事物的用时。就是假定所有事物的时间长度不可以超过5分钟。
因为我们在程序中经常是先设置更新时间,然后插入数据库,然后再做些别的(浪费了一些时间),
最后提交了事物。那么根据mvcc模式,非锁定读,是读快照。导致更新时间本应该在本次同步中被同步的,而并没有同步到
(不可见),而下一次的同步时间又大于了这个更新时间。导致会丢失更新。所以每次同步,都多同步5分钟的数据。
就怕丢下这种间隙中的数据。
2、用商定的取值时间进行同步数据。
主服务器数据不可以 ...