精华内容
下载资源
问答
  • Aspect#的动态截

    千次阅读 2004-09-15 12:51:00
    代理对象是通过以下代码来进行动态戴入.switch (handlerField.Name) { case mixinHandlerFieldName: { ilGenerator.Emit(OpCodes.Callvirt, typeof(IMixinInvocationHandler).GetMethod("Invoke") ); break; } 

    代理对象是通过以下代码来进行动态戴入.

    switch (handlerField.Name) {
     case mixinHandlerFieldName:
        {
            ilGenerator.Emit(OpCodes.Callvirt, typeof(IMixinInvocationHandler).GetMethod("Invoke") );
            break;
        }
        default: 
        {
            ilGenerator.Emit(OpCodes.Callvirt, typeof(IInvocationHandler).GetMethod("Invoke") );
            break;
        }
    }

    而IMixinInvocationHandler和IInvocationHandler接口的实现在代理对象的构造方法中中传入, 如下代码:

    // class AspectSharpEngine
    public static object Wrap(object target) {
         Type originType = target.GetType();
         string typeName = originType.FullName;

         IInvocationHandler handler = GetInvocationHandler(target);
         IMixinInvocationHandler mixinHandler = GetMixinInvocationHandler();
         IMixin[] mixins = GetMixins(typeName);

         // ...

         return ProxyGenerator.CreateInstance(  _typeCache[typeName], mixins, handler, mixinHandler );
    }
    同时传入代理对象构造方法的还有对象上的混合器接口.
    这里IInvocationHandler的实现为DefaultInvocationHandler,
    IMixinvocationHandler的实现为MixinInvocationHandler,
    GetMixins从配置文件中获取加在对象上的所有混入器.

    方法的截入过程:

    1. 代理对象调用DefaultInvocationHandler.Invoke;
    2. Invoke方法调用GetMethodInvocation通过配置文件来取得方法的拦截器;
       IMethodInvocation GetMethodInvocation(MethodInfo method, object[] arguments) {
           string typeName = _target.GetType().FullName;

           IAspect aspect = GetAspectForType(typeName);

           if(aspect != null && aspect.PointCuts != null) {
               IMatch match = _methodMatcher.Match(method, aspect.PointCuts);
               return new InterceptorMethodInvocation(_target, method, arguments, match.Interceptors);
               // match.Interceptors为方法的所有载入点.
           }
           else {
               return new DefaultMethodInvocation(_target, method, arguments);
           }
       }

    这时有两种情况

    a 方法没有定义截入点.
    3. 建立一个DefaultMethodInvocation(默认的方法转发器);
    4. 调用InvokeMethod执行真正的方法实现代码.

    b. 方法有定义截入点.
    3. 建立一个InterceptorMethodInvocation(拦截方法转发器);
    4. 调用转发器的proceed方法;
         // class IntreceptorMethodInvocation
          public override object Proceed() {
               if ( _currentInterceptorIndex == (_interceptors.Length - 1) ) {
                     return InvokeMethod(_target, _method, _arguments);
               }

                 _currentInterceptorIndex++ ;

                 IInterceptor currentInterceptor = _interceptors[_currentInterceptorIndex];

                 if(currentInterceptor is IMethodInterceptor) {
                        return ((IMethodInterceptor)currentInterceptor).Invoke(this);
                 }
                 else {
                       return InvokeMethod(_target, _method, _arguments);
                 }
              }
              // 调用拦截器的Invoke方法, 然后执行真正方法的实现代码.
              // 拦截器必须实现IMethodInterceptor接口.

         此段代码只能调用_interceptors[0]的拦截器代码, 其它拦截器代码如何执行入?
        答案在我们实现的拦截器中,  在拦截器中, 典型的Invoke代码如下:
           public object Invoke(IMethodInvocation invocation)  {
              try  {
                 // ...
                 return invocation.Proceed();  这个是必须的, 这将使拦截过程继续下去.
              }
              catch(Exception e)  {
                  // ...
              }
              return null;
          }

    混合器的混入过程

    1. 调用MixinInvocationHandler.Invoke方法;
    2. 通过DefaultInvocationHandler的GetTargetMethod取得混合器的方法.
    3. 调用方法的实现代码.

    展开全文
  • 系统登录的密码加盐和动态加

    千次阅读 2018-04-24 16:55:59
    当然这就需要我们在添加用户和修改用户密码的时候也采用这样的前后台动态加盐的方式将初始密码存到数据库中。 其实这种方式也不是绝对安全,黑客高手可以停或者阶段你的请求,进行网络重播,那么你的密码加不...

    关于系统登录,在上大学的时候就是简单的用户名密码存储到数据库进行匹配,当然这是最基本的登录,但是实际的应用系统中这是非常不安全的,账户密码不论是在数据库中存储还是在网上传输过程中都应该是密文而不能是明文,一般都是采用MD5或者SHA加密算法把密码加密,但是这也是不安全的,因为现在网上对于这些流行的加密算法都有密码库,他可以利用库去对比加密后的密文从而反向推出你的密码,网上也有各种在线MD5加密解密的网站,所以像“123456”这种密码很容易被破解。那么为了解决这个问题就有一个增加密码强度的问题,我们通常使用加盐的方式,这个盐一般是一个字符串,可以只固定的也可以是不固定的,他会加到密码后面一起加密,或则你可以把它个加密后的密码在进行另一种加密算法的加密,这样密码的安全程度就显著提高,但是这样如果是采用的固定盐,那么如果数据库泄露的话也有一定的彩虹码碰撞的风险,这里可以考虑使用动态加盐的方式,即每个用户的一个属性作为盐,那么想要破解密码,每个用户都需要用一个库去比较,大大增加了破解所有账户的难度。
    贴一点代码方便大家了解:

    我这里举个栗子,系统登录的时候,前端使用js把用户输入的密码使用Md5加密后再加上一个时间戳传到后台:

            //时间戳
            var rand = new Date().getTime();
            //MD5加密后加上时间戳
            var password = md5($('#password').val())+rand;

    后台获取前台传来的密码截取加密段然后加上动态的账户号作为动态盐进行SHA加密后与数据库中的密码进行对比

            //截取密码,去掉时间戳
            passWord = passWord.substring(0,32);
            //动态加盐,把用户名作为盐使用SHA进行二次加密
            inputPassword = SHAUtil.encode(passWord+user.getLoginName());

    当然这就需要我们在添加用户和修改用户密码的时候也采用这样的前后台动态加盐的方式将初始密码存到数据库中。
    其实这种方式也不是绝对安全,黑客高手可以截停或者阶段你的请求,进行网络重播,那么你的密码加不加密都没有意义,你输入了什么只要可以登录成功,他也发送一个同样的就可以了,这里就不深入探讨了,有相关的问题可以和我讨论。

    展开全文
  • 算法-动态规划 Dynamic Programming--从菜鸟到老鸟

    万次阅读 多人点赞 2017-07-15 22:58:29
    前言最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic Programming)算法的题目很多。相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Programming)算法了,于是花了好长时间...

    前言

    最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic Programming)算法的题目很多。相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Programming)算法了,于是花了好长时间,查找了相关的文献和资料准备彻底的理解动态规划(Dynamic Programming)算法。一是帮助自己总结知识点,二是也能够帮助他人更好的理解这个算法。后面的参考文献只是我看到的文献的一部分。

    动态规划算法的核心

    理解一个算法就要理解一个算法的核心,动态规划算法的核心是下面的一张图片和一个小故事。

    这里写图片描述

    A * "1+1+1+1+1+1+1+1 =?" *
    
    A : "上面等式的值是多少"
    B : *计算* "8!"
    
    A *在上面等式的左边写上 "1+" *
    A : "此时等式的值为多少"
    B : *quickly* "9!"
    A : "你怎么这么快就知道答案了"
    A : "只要在8的基础上加1就行了"
    A : "所以你不用重新计算因为你记住了第一个等式的值为8!动态规划算法也可以说是 '记住求过的解来节省时间'"
    

    由上面的图片和小故事可以知道动态规划算法的核心就是记住已经解决过的子问题的解。

    动态规划算法的两种形式

    上面已经知道动态规划算法的核心是记住已经求过的解,记住求解的方式有两种:①自顶向下的备忘录法自底向上。
    为了说明动态规划的这两种方法,举一个最简单的例子:求斐波拉契数列**Fibonacci **。先看一下这个问题:

    Fibonacci (n) = 1;   n = 0
    
    Fibonacci (n) = 1;   n = 1
    
    Fibonacci (n) = Fibonacci(n-1) + Fibonacci(n-2)
    

    以前学c语言的时候写过这个算法使用递归十分的简单。先使用递归版本来实现这个算法:

    public int fib(int n)
    {
    	if(n<=0)
    		return 0;
    	if(n==1)
    		return 1;
    	return fib( n-1)+fib(n-2);
    }
    //输入6
    //输出:8
    
    

    先来分析一下递归算法的执行流程,假如输入6,那么执行的递归树如下:

    这里写图片描述
    上面的递归树中的每一个子节点都会执行一次,很多重复的节点被执行,fib(2)被重复执行了5次。由于调用每一个函数的时候都要保留上下文,所以空间上开销也不小。这么多的子节点被重复执行,如果在执行的时候把执行过的子节点保存起来,后面要用到的时候直接查表调用的话可以节约大量的时间。下面就看看动态规划的两种方法怎样来解决斐波拉契数列**Fibonacci **数列问题。

    ①自顶向下的备忘录法

    public static int Fibonacci(int n)
    {
    		if(n<=0)
    			return n;
    		int []Memo=new int[n+1];		
    		for(int i=0;i<=n;i++)
    			Memo[i]=-1;
    		return fib(n, Memo);
    	}
    	public static int fib(int n,int []Memo)
    	{
    		
    		if(Memo[n]!=-1)
    			return Memo[n];
    	//如果已经求出了fib(n)的值直接返回,否则将求出的值保存在Memo备忘录中。				
    		if(n<=2)
    			Memo[n]=1;
    		
    		else Memo[n]=fib( n-1,Memo)+fib(n-2,Memo);	
    		
    		return Memo[n];
    	}
    

    备忘录法也是比较好理解的,创建了一个n+1大小的数组来保存求出的斐波拉契数列中的每一个值,在递归的时候如果发现前面fib(n)的值计算出来了就不再计算,如果未计算出来,则计算出来后保存在Memo数组中,下次在调用fib(n)的时候就不会重新递归了。比如上面的递归树中在计算fib(6)的时候先计算fib(5),调用fib(5)算出了fib(4)后,fib(6)再调用fib(4)就不会在递归fib(4)的子树了,因为fib(4)的值已经保存在Memo[4]中。

    ②自底向上的动态规划

    备忘录法还是利用了递归,上面算法不管怎样,计算fib(6)的时候最后还是要计算出fib(1),fib(2),fib(3)…,那么何不先计算出fib(1),fib(2),fib(3)…,呢?这也就是动态规划的核心,先计算子问题,再由子问题计算父问题。

    public static int fib(int n)
    {
    		if(n<=0)
    			return n;
    		int []Memo=new int[n+1];
    		Memo[0]=0;
    		Memo[1]=1;
    		for(int i=2;i<=n;i++)
    		{
    			Memo[i]=Memo[i-1]+Memo[i-2];
    		}		
    		return Memo[n];
    }
    

    自底向上方法也是利用数组保存了先计算的值,为后面的调用服务。观察参与循环的只有 i,i-1 , i-2三项,因此该方法的空间可以进一步的压缩如下。

    public static int fib(int n)
    	{
    		if(n<=1)
    			return n;
    		
    		int Memo_i_2=0;
    		int Memo_i_1=1;
    		int Memo_i=1;
    		for(int i=2;i<=n;i++)
    		{
    			Memo_i=Memo_i_2+Memo_i_1;
    			Memo_i_2=Memo_i_1;
    			Memo_i_1=Memo_i;
    		}		
    		return Memo_i;
    	}
    

    一般来说由于备忘录方式的动态规划方法使用了递归,递归的时候会产生额外的开销,使用自底向上的动态规划方法要比备忘录方法好。
    你以为看懂了上面的例子就懂得了动态规划吗?那就too young too simple了。动态规划远远不止如此简单,下面先给出一个例子看看能否独立完成。然后再对动态规划的其他特性进行分析。

    动态规划小试牛刀

    例题:钢条切割

    这里写图片描述

    这里写图片描述
    这里写图片描述
    这里写图片描述
    上面的例题来自于算法导论
    关于题目的讲解就直接截图算法导论书上了这里就不展开讲。现在使用一下前面讲到三种方法来来实现一下。
    ①递归版本

    public static int cut(int []p,int n)
    	{
    		if(n==0)
    			return 0;
    		int q=Integer.MIN_VALUE;
    		for(int i=1;i<=n;i++)
    		{
    			q=Math.max(q, p[i-1]+cut(p, n-i));	
    		}
    		return q;
    	}
    

    递归很好理解,如果不懂可以看上面的讲解,递归的思路其实和回溯法是一样的,遍历所有解空间但这里和上面斐波拉契数列的不同之处在于,在每一层上都进行了一次最优解的选择,q=Math.max(q, p[i-1]+cut(p, n-i));这个段语句就是最优解选择,这里上一层的最优解与下一层的最优解相关。

    ②备忘录版本

    public static int cutMemo(int []p)
    	{
    		int []r=new int[p.length+1];
    		for(int i=0;i<=p.length;i++)
    			r[i]=-1;						
    		return cut(p, p.length, r);
    	}
    	public static int cut(int []p,int n,int []r)
    	{
    		int q=-1;
    		if(r[n]>=0)
    			return r[n];
    		if(n==0)
    			q=0;
    		else {
    			for(int i=1;i<=n;i++)
    				q=Math.max(q, cut(p, n-i,r)+p[i-1]);
    		}
    		r[n]=q;
    		
    		return q;
    	}
    

    有了上面求斐波拉契数列的基础,理解备忘录方法也就不难了。备忘录方法无非是在递归的时候记录下已经调用过的子函数的值。这道钢条切割问题的经典之处在于自底向上的动态规划问题的处理,理解了这个也就理解了动态规划的精髓。

    ③自底向上的动态规划

    public static int buttom_up_cut(int []p)
    	{
    		int []r=new int[p.length+1];
    		for(int i=1;i<=p.length;i++)
    		{
    			int q=-1;
    			//①
    			for(int j=1;j<=i;j++)
    				q=Math.max(q, p[j-1]+r[i-j]);
    			r[i]=q;
    		}
    		return r[p.length];
    	}
    

    自底向上的动态规划问题中最重要的是理解注释①处的循环,这里外面的循环是求r[1],r[2]…,里面的循环是求出r[1],r[2]…的最优解,也就是说r[i]中保存的是钢条长度为i时划分的最优解,这里面涉及到了最优子结构问题,也就是一个问题取最优解的时候,它的子问题也一定要取得最优解。下面是长度为4的钢条划分的结构图。我就偷懒截了个图。

    这里写图片描述

    动态规划原理

    虽然已经用动态规划方法解决了上面两个问题,但是大家可能还跟我一样并不知道什么时候要用到动态规划。总结一下上面的斐波拉契数列和钢条切割问题,发现两个问题都涉及到了重叠子问题,和最优子结构。

    ①最优子结构

    用动态规划求解最优化问题的第一步就是刻画最优解的结构,如果一个问题的解结构包含其子问题的最优解,就称此问题具有最优子结构性质。因此,某个问题是否适合应用动态规划算法,它是否具有最优子结构性质是一个很好的线索。使用动态规划算法时,用子问题的最优解来构造原问题的最优解。因此必须考查最优解中用到的所有子问题。


    ②重叠子问题

    在斐波拉契数列和钢条切割结构图中,可以看到大量的重叠子问题,比如说在求fib(6)的时候,fib(2)被调用了5次,在求cut(4)的时候cut(0)被调用了4次。如果使用递归算法的时候会反复的求解相同的子问题,不停的调用函数,而不是生成新的子问题。如果递归算法反复求解相同的子问题,就称为具有重叠子问题(overlapping subproblems)性质。在动态规划算法中使用数组来保存子问题的解,这样子问题多次求解的时候可以直接查表不用调用函数递归。

    动态规划的经典模型

    线性模型

    线性模型的是动态规划中最常用的模型,上文讲到的钢条切割问题就是经典的线性模型,这里的线性指的是状态的排布是呈线性的。【例题1】是一个经典的面试题,我们将它作为线性模型的敲门砖。

    **【例题1】**在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多少。

    这里写图片描述

    每次过桥的时候最多两个人,如果桥这边还有人,那么还得回来一个人(送手电筒),也就是说N个人过桥的次数为2*N-3(倒推,当桥这边只剩两个人时只需要一次,三个人的情况为来回一次后加上两个人的情况…)。有一个人需要来回跑,将手电筒送回来(也许不是同一个人,realy?!)这个回来的时间是没办法省去的,并且回来的次数也是确定的,为N-2,如果是我,我会选择让跑的最快的人来干这件事情,但是我错了…如果总是跑得最快的人跑回来的话,那么他在每次别人过桥的时候一定得跟过去,于是就变成就是很简单的问题了,花费的总时间:

    T = minPTime * (N-2) + (totalSum-minPTime)

    来看一组数据 四个人过桥花费的时间分别为 1 2 5 10,按照上面的公式答案是19,但是实际答案应该是17。

    具体步骤是这样的:

    第一步:1和2过去,花费时间2,然后1回来(花费时间1);

    第二歩:3和4过去,花费时间10,然后2回来(花费时间2);

    第三部:1和2过去,花费时间2,总耗时17。

    所以之前的贪心想法是不对的。我们先将所有人按花费时间递增进行排序,假设前i个人过河花费的最少时间为opt[i],那么考虑前i-1个人过河的情况,即河这边还有1个人,河那边有i-1个人,并且这时候手电筒肯定在对岸,所以opt[i] = opt[i-1] + a[1] + a[i] (让花费时间最少的人把手电筒送过来,然后和第i个人一起过河)如果河这边还有两个人,一个是第i号,另外一个无所谓,河那边有i-2个人,并且手电筒肯定在对岸,所以opt[i] = opt[i-2] + a[1] + a[i] + 2a[2] (让花费时间最少的人把电筒送过来,然后第i个人和另外一个人一起过河,由于花费时间最少的人在这边,所以下一次送手电筒过来的一定是花费次少的,送过来后花费最少的和花费次少的一起过河,解决问题)
    所以 opt[i] = min{opt[i-1] + a[1] + a[i] , opt[i-2] + a[1] + a[i] + 2
    a[2] }

    区间模型

    区间模型的状态表示一般为d[i][j],表示区间[i, j]上的最优解,然后通过状态转移计算出[i+1, j]或者[i, j+1]上的最优解,逐步扩大区间的范围,最终求得[1, len]的最优解。

    【例题2】给定一个长度为n(n <= 1000)的字符串A,求插入最少多少个字符使得它变成一个回文串。
    典型的区间模型,回文串拥有很明显的子结构特征,即当字符串X是一个回文串时,在X两边各添加一个字符’a’后,aXa仍然是一个回文串,我们用d[i][j]来表示A[i…j]这个子串变成回文串所需要添加的最少的字符数,那么对于A[i] == A[j]的情况,很明显有 d[i][j] = d[i+1][j-1] (这里需要明确一点,当i+1 > j-1时也是有意义的,它代表的是空串,空串也是一个回文串,所以这种情况下d[i+1][j-1] = 0);当A[i] != A[j]时,我们将它变成更小的子问题求解,我们有两种决策:

    1、在A[j]后面添加一个字符A[i];

    2、在A[i]前面添加一个字符A[j];

    根据两种决策列出状态转移方程为:

    d[i][j] = min{ d[i+1][j], d[i][j-1] } + 1; (每次状态转移,区间长度增加1)

    空间复杂度O(n2),时间复杂度O(n2), 下文会提到将空间复杂度降为O(n)的优化算法。

    背包模型

    背包问题是动态规划中一个最典型的问题之一。由于网上有非常详尽的背包讲解,这里只将常用部分抽出来。

    **【例题3】**有N种物品(每种物品1件)和一个容量为V的背包。放入第 i 种物品耗费的空间是Ci,得到的价值是Wi。求解将哪些物品装入背包可使价值总和最大。f[i][v]表示前i种物品恰好放入一个容量为v的背包可以获得的最大价值。决策为第i个物品在前i-1个物品放置完毕后,是选择放还是不放,状态转移方程为:

    f[i][v] = max{ f[i-1][v], f[i-1][v – Ci] +Wi }

    时间复杂度O(VN),空间复杂度O(VN) (空间复杂度可利用滚动数组进行优化达到O(V) )。

    动态规划题集整理

    1、最长单调子序列
    Constructing Roads In JG Kingdom★★☆☆☆
    Stock Exchange ★★☆☆☆

    2、最大M子段和
    Max Sum ★☆☆☆☆
    最长公共子串 ★★☆☆☆

    3、线性模型
    Skiing ★☆☆☆☆

    总结

    弄懂动态规划问题的基本原理和动态规划问题的几个常见的模型,对于解决大部分的问题已经足够了。希望能对大家有所帮助,转载请标明出处https://blog.csdn.net/u013309870/article/details/75193592,创作实在不容易,这篇博客花了我将近一个星期的时间。
    参考文献

    1.算法导论

    展开全文
  • 这是简介这其实就是自己做动态壁纸,可以实现壁纸虚化缩放的功能。纯净无广告不联网,体验还算不错。整体界面非常干净,一进去就可以开始修改了。而且自定义动画曲线可以返回直接生效,不用点击保存。常见问题解答...
    这 是 简 介 这其实就是自己做动态壁纸, 可以实现壁纸虚化加缩放的功能。 纯净无广告不联网,体验还算不错。 整体界面非常干净,一进去就可以开始修改了。 而且自定义动画曲线可以返回直接生效,不用点击保存。 常见问题解答 快速前后台切换时没有动画?
    应用没有完全开启,壁纸始终处于可见状态,状态未产生变化 能否单独设置锁屏? 不能 亮屏解锁进入桌面没动画? 亮屏时壁纸已经是可见了,动画已经开始播放,进入桌面系统不会通知再次播放动画 锁屏应用不了? 尝试先用系统的动态壁纸,设置桌面加锁屏,然后再用这个软件设置 动画卡在模糊的一帧? 使用默认参数,并把画质调到最低,时长调到最低,尝试是否可以动 提示处理异常? 关闭高帧率,或者调低画质 壁纸能否导出? 生成的是视频,在下面这个目录里可以找到 Android/data/com.srm.blurscalewallpaper/files/Pictures/ 这 是 截 图 82aad7121384c5b90880ebcc1110da2b.png

    61aeb7350ce9ce4c56c7a3f0aa301a9e.png

    44c9f7540626e3e19cfde6910dee5709.png

    直 达 地 址 在公众号的评论区置顶

    点击/复制那里面的网址

    90623e5b0f4d341a388ffd96565e0be2.gif

    有没有在看

    展开全文
  • 如题,我在后台拼接了不定个数的input 用来给操作人员打分数,但是我同样要在后台将大的分数取出来,存数据库中,现在不会取值了,怎么办?...不会图片,就不页面效果图了, 这样怎么在后台取到那些input的值呢
  • 针对割头的钻进和摆动(以左右摆动为例)2种工况,在截割路线和位置移动变化等运动特性易于被直接表述的固定和动态空间坐标系中建立相应的运动学数学模型,分析得到速度、速度等相关参数的影响因子。在此基础上,运用...
  • 为了给掘进机割头的设计及加工提供理论支撑和工艺方法,结合截齿工作角度的定义,提出了动态、静态截割角和动态、静态倾斜角的概念,并推导出了数学计算公式;推导出了截齿齿根的空间坐标求解公式,为三维设计建立了...
  • UILabel *label = [[ UILabel alloc] init]; label.text = @"xxx"; label.frame = CGRectMake(0,0,100,100) ; label.backgroundColor = [UIColor ...//添加事件。 label.userInteractionEnabled = YES; UITapGes
  • 为此引入 t-网络的概念, 将动态网络化成静态网络的组合, 为动态网络的分析提供一个有效的方法; 在此基础上提出( 最速) 最大流量的定义, 并证明新定义的最大流具有可性和总量最大性. 接着给出相应的最小割...
  • FPGA信号的位问题

    千次阅读 2016-12-01 16:44:50
    由于FPGA中位是经常性遇到的问题,在我做的基于FPGA的music抗干扰算法中,对于位来说,我使用的下面文中的“负数位后1”。我觉得其中介绍的方法很有用,故特此转载过来供大家分享。 在FPGA中,随着信号处理...
  • FPGA数字信号位分析和位宽设计

    千次阅读 2020-06-30 16:24:12
    对多位数据进行位处理,是一个从高量化精度向低量化精度的转换过程,由于量化位数的减少,产生位误差,导致运算结果在时域上出现直流分量,频域出现由谐波失真造成的尖峰,降低了信号的无杂散动态范围。...
  • denseflow视频帧提取光流工具

    万次阅读 热门讨论 2018-12-22 14:31:25
    这个工具可以对视频进行帧,并计算光流保存到本地,使用了GPU编译的OpenCV,所以提取速度很快,后续可以用于行为动作识别中,例如two-stream网络、TSN等。 1、简单介绍 官方提供的安装方式很简单,如下,编译后就...
  • 本例,我是使用的upload默认的上传地址(很多图片不能上传,你可以在本地几张图片,进行测试),我可以上传多张活动图片,可以相应的,名称,链接描述等,如果有多个活动,可以点击添加活动,在第二个活动又能...
  • 动态规划

    2015-01-20 23:20:56
    终于来到了算法设计思想中最难,也最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。 看了这么久的算法,这部分也是唯一感觉到了比较难的地方, 从这篇文章开始,...
  • 动态注册bean

    2019-05-04 16:51:08
    看完该篇文章我们可以了解到为何要动态注册bean、动态注册bean的方式、注册和实例化的区别、spring是什么时候实例化bean的。 描述: 前阵子在给项目写组件的时候研究了下spring组件拓展流程,其中遇见了动态注册bean...
  • webuploader动态新增控件上传多种图片我的使用场景1、首先准备空的模板做拷贝复制用2、然后准备进行动态添加户型操作2.1、添加及删除按钮2.2、关键部分(添加操作)3、获取数据操作(户型数据)4、图片展示(不了长...
  • 动态规划算法

    千次阅读 2018-10-17 22:25:52
    相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Programming)算法了,于是花了好长时间,查找了相关的文献和资料准备彻底的理解动态规划(Dynamic Programming)算法。一是帮助自己总结...
  • 这章主要是上传视频帧,公司需求对动态上传需求是OSS上传和帧(最开始时没有需求,自己用的是FFmpeg 多媒体处理工具截取的),最后因为服务器上没有FFmpeg 工具,导致上传docker报错,失败,最后OSS截取帧数。...
  • 浅谈DNS持问题

    2017-11-07 23:38:00
    其实通过DNS持的方法就可以搞定,下边我就简单分享下相关配置方法: 【安装DNS角色】 1)如下图所示,点击“服务器管理器”图标按钮; 2)在下图所示页面中,选择角色下的“添加角色”; 3)在下图所示页面中,单击...
  • 也可以使用 tail -f /var/log/modsec_audit.log -n 1实时跟踪被拦的信息! 这样就表示成功了,为什么拦截这个,是因为我们在main.conf中写了一个规则: SecRule ARGS:testparam "@contains test" "id:1234,...
  • Java 动态代理

    2014-05-19 16:36:41
    JVM可以在运行期动态的生成出类的字节码,这种动态
  • 基于jQuery手机端上拉下拉刷新页面代码。这是一款类似QQ空间客户端或者微信下拉刷新页面特效代码
  • 动态规划总结

    万次阅读 2017-08-05 13:42:12
    终于来到了算法设计思想中最难,也最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续...
  • 动态非侵入拦截

    千次阅读 2009-06-14 12:46:00
    动态代理方式实现起来简单,你只要提供一个接口和拦截处理的handler并在invoke中提供要拉的方法调用时的附件操作,然后所有对需要拦截的方法所在的对象都由代理来生成就可以在运行时动态地实现对方法调进行拦截。...
  • 了半天的图,时间不早了,闲话不多说,直接上图:
  • 动态规划原理解析

    千次阅读 2017-11-29 11:11:10
    终于来到了算法设计思想中最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续的篇幅来...
  • 应用层包介绍

    千次阅读 2006-09-17 22:21:00
    包的需求一般来自于过滤、转换协议、截取报文分析等。 过滤型的应用比较多,典型为包过滤型防火墙。 转换协议的应用局限于一些特定环境。比如第三方开发网络协议软件,不能够与原有操作系统软件融合,只好采取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,954
精华内容 6,781
关键字:

动态加截