精华内容
下载资源
问答
  • 主要介绍了全面解析SpringBoot自动配置的实现原理的相关资料,需要的朋友可以参考下
  • 主要介绍了Python基于pywinauto实现PC客户端自动化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Nuxt.js之自动路由原理实现方法,nuxt.js会根据pages目录结构自动生成vue-router模块的路由配置。非常具有实用价值,需要的朋友可以参考下
  • android实现自动登录

    2014-12-22 20:10:08
    android实现自动登录,简单易懂。 接下来添加切换账号
  • 主要介绍了详解SpringBoot自动配置原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • java web自动登录原理实现

    千次阅读 2018-10-08 09:12:38
    1、建立web工程2、创建用户名、密码的数据库并创建对应的连接工厂及... a、session记住登录用户  b、使用cookie记录登录用户信息,注意密码要用MD5进行加密(防止别人破解Cookie进行恶意操作)5、创建Filter,在Fi...

    1、建立web工程
    2、创建用户名、密码的数据库并创建对应的连接工厂及dao,service
    3、创建登录页面(表单),含有记住密码选项
    4、创建Servlet,接收登录参数,查询数据库,登录判断,进行成功跳转(欢迎页面),
        a、session记住登录用户
        b、使用cookie记录登录用户信息,注意密码要用MD5进行加密(防止别人破解Cookie进行恶意操作)
    5、创建Filter,在Filter中读取Cookie中的用户名和密码的User信息,若不为空则进行登录
        a、根据Cookie中的用户信息去查询密码,然后比对密码是否一致,若一致创建session记住登录用户并跳转
        
    !!!!自动登录的过程是用户在成功登录且在Cookie有效期以内时,用户访问登录页面不用在手动输入用户名密码进行登录
    而是从Cookie中获取用户名,再根据用户信息去查询密码,然后比对密码是否一致,若一致创建session记住登录用户并跳转

    展开全文
  • 再说AutoComplete自动补全之实现原理,这里以asp.net后台为主,考虑到性能最好是生成xml并入缓存。
  • 1 什么是自动装箱?什么是自动拆箱? 自动装箱和自动拆箱的示例: public class Test { public static void main(String[] args) { ArrayList<Integer> intList = new ArrayList<Integer>(); int...
    1 什么是自动装箱?什么是自动拆箱?

    自动装箱和自动拆箱的示例:

    public class Test {
    	public static void main(String[] args) {
    		ArrayList<Integer> intList = new ArrayList<Integer>();
    		intList.add(100);
    		intList.add(150);
    		intList.add(200);
    		
    		int a = intList.get(0);
    		int b = intList.get(1);
    		int c = intList.get(2);
    		
    		System.out.println(a + ", " + b + ", " + c);
    	}
    }
    

    intList列表中只能放Integer类型的对象,而代码中把int基本数据类型放到intList列表中,那么实际上编译器会把int基本数据类型转换城Integer类型(包装类)的对象,那么编译器的这个操作过程就是装箱的过程;而从intList列表中拿取的也是Integer类型的对象,而代码中把Integer类型的对象赋值给int基本数据类型,那么编译器会把Integer类型的对象转换成int基本数据类型,那么编译器的这个操作过程就是拆箱的过程;另外,由于装箱和拆箱都是编译器自动完成,不需要在代码中显式的说明,故称为自动装箱和自动拆箱。基本数据类型byte,short,char,int,long,float,double和boolean对应的包装类为Byte,Short,Character,Integer,Long,Float,Double和Boolean。

    2 如何实现自动装箱和自动拆箱?

    自动装箱和自动拆箱由编译器自动完成。当编译器检测到需要把基本类型转换成包装类型时,编译器自动调用包装类型的valueOf()方法实现自动装箱;当编译器检测到需要把包装类型转换成基本类型时,编译器自动调用包装类型的xxValue()方法实现自动拆箱

    八大基本数据类型自动装箱的原理代码

    // Byte
    public static Byte valueOf(byte b) {
            final int offset = 128;
            return ByteCache.cache[(int)b + offset];
        }
    
    // Short
    public static Short valueOf(short s) {
            final int offset = 128;
            int sAsInt = s;
            if (sAsInt >= -128 && sAsInt <= 127) { // must cache
                return ShortCache.cache[sAsInt + offset];
            }
            return new Short(s);
        }
    
    // Character
    public static Character valueOf(char c) {
            if (c <= 127) { // must cache
                return CharacterCache.cache[(int)c];
            }
            return new Character(c);
        }
    
    // Ingeger
    public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        } 
    
    // Long
    public static Long valueOf(long l) {
            final int offset = 128;
            if (l >= -128 && l <= 127) { // will cache
                return LongCache.cache[(int)l + offset];
            }
            return new Long(l);
        }
    
    // Double
    public static Double valueOf(double d) {
            return new Double(d);
        }
    
    // Float
    public static Float valueOf(float f) {
            return new Float(f);
        }
    
    // Boolean
    public static Boolean valueOf(boolean b) {
            return (b ? TRUE : FALSE);
        }
    

    从装箱的源代码可知,当基本类型为byte,short,char,int和long类型时,首先根据赋值的数值大小判断是否在缓存区,否则直接new一个对应的包装类型对象;注意只有double和float会直接new一个包装类。(因为基本数据类型byte,char和int用的较多,所以Java在包装类初始化的时候在内存中缓存一定范围的值,避免生成大量的对象。缓存范围为[-128,127],正好是short基本类型的范围)。

    八大基本数据类型自动拆箱的原理代码:

    public xxx xxxValue() {
            return value;
        }
    
    3 自动装箱和自动拆箱有什么作用?有什么弊端?

    JDK1.5之前,编译器还没有实现自动装箱和自动拆箱,需要显式的编写装箱和拆箱的过程;如下面的代码:

    intList.add(Integer.valueOf(100));
    intList.add(Integer.valueOf(150));
    intList.add(Integer.valueOf(200));
    		
    int _a = intList.get(0).intValue();
    int _b = intList.get(1).intValue();
    int _c = intList.get(2).intValue();
    

    可以看出代码很繁杂,JDK1.5之后的valueOf()和intValue()由编译器自动完成,可以简化代码。
    自动装箱和自动拆箱给我们带来便利的同时,也带来了弊端,主要体现以下几点:

    • 包装类之间的比较;
    	public static void method2() {
    		Integer a = 100;
    		int _a = 100;
    		Integer _a1 = new Integer(100);
    		System.out.println("a == _a : " + (a == _a));     // true
    		System.out.println("a == _a1 : " + (a == _a1));   // false
    		System.out.println("_a == _a1 : " + (_a == _a1)); //true
    		
    		Integer b = 200;
    		int _b = 200;
    		Integer _b1 = new Integer(200);
    		System.out.println("b == _b : " + (b == _b));     // false
    		System.out.println("b == _b1 : " + (b == _b1));   // false
    		System.out.println("_b == _b1 : " + (_b == _b1)); //false
    	}
    

    ==可以用于对象与对象之间的比较,比较的是对象的内存地址是否相等,即是否是同一个对象,比较的过程没有自动拆箱;也可以用于基本数据类型之间的比较,比较的是字面值;所以,对于对象之间的比较应该用equals()方法。

    • 稍不留神,容易创建额外对象
    Integer result = 0;
    for (int i = 127; i < 1127; i++) {
        result += i;
    }
    

    上面的result += i 实际会先进行自动拆箱操作,然后进行自动装箱操作。即

    result = result.intValue() + i;
    result = result.valueOf(result);
    

    自动装箱实际会创建1000各无用的Integer对象,会给内存造成极大的浪费;所以编写代码中避免使用不必要的自动装箱。

    展开全文
  • 主要介绍了浅析SpringBoot自动化配置原理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 自动化测试实现原理

    千次阅读 2019-09-24 20:47:32
    深入理解前端自动化测试原理

    作为一个前端开发者,我们会经常遇到bug, 如安全性的bug、逻辑性的bug、性能bug、展示bug等等。
    当我们遇到复杂的业务场景,或者对老代码进行修补时,遇到bug更是正常现象,在编码过程中,我们可以借助Typescript/Flow/Eslint/StyleLint等一些插件尽可能的去降低bug出现的概率,提高代码规范。为了防止bug会被带到线上的情况,我们需要在项目上线之前,借助一些自动化测试工具,来再次避免bug的产生。

    什么是前端自动化测试

    我们来写一段测试的js代码,通过测试的js代码,来运行我们实际业务中的代码。预期它的执行结果,并把我们的预期结果与实际结果比较是否相等。如果相等,说明代码没有问题,如果不相等,就说明代码有问题,抛出异常。

    通过单元测试的demo,来理解自动化测试原理:
    demo目录:

    |--demo
    	|--index.html
    	|--math.js
    	|--math.test.js
    

    math.js

    // 加法函数
    function add (a, b) {
      return a + b;
    }
    // 减法函数
    function minus (a, b) {
      // return a - b; // 正确写法
      return a * b; // 错误写法(这里可以故意写错,方便测试)
    }
    

    math.test.js

    // 最初版
    // 通过设置预期值,判断预期值和实际结果是否相等,若不相等则抛出错误
    var result = add(3, 7);
    var expected = 10;
    
    if(result !== 10) {
      throw Error(`3 + 7 应该等于${expected}, 但是结果却是${result}`);
    }
     
    var result = minus(3, 3);
    var expected = 0;
    
    if(result !== 0) {
      throw Error(` 3 - 3 应该等于 ${expected}, 但是结果却是 ${result}`);
    }
    

    index.html (在html页面里引入math.js)

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>math</title>
      <script src="math.js"></script>
    </head>
    <body>
      
    </body>
    </html>
    

    在浏览器中打开index.html页面,由于页面引入了math.js脚本,此时页面中已经存在add和minus函数了。打开控制台,我们把编写的测试代码复制到控制台执行:

    • 结果符合我们预期,3 - 3应该等于0,而我们的实际执行结果却是9,是因为我们的minus函数中的计算写成了 ‘*’ (乘法)导致。

    上方代码确实解决了我们的问题,但是如果业务代码较多的情况下,我们不可能针对每个函数都要写一遍测试代码,所以我们想到了测试代码的封装:(math.test.js中代码改写内容如下)

    // 封装测试函数--第一版
    function expect (result) {
      return {
        toBe: function(actual) {
          if(result !== actual) {
            throw new Error('预期值和实际值不相等');
          }
        }
      }
    }
    
    expect(add(3, 7)).toBe(10);
    expect(minus(3, 3)).toBe(0);
    

    刷新index.html页面,把上方代码复制到控制台执行:

    依然能抛出异常,但是存在一个问题就是:所有的报错信息都为预期值和实际值不相等,错误信息定位不准确。接下来再次进行优化:(math.test.js中代码改写内容如下)

    // 再次优化--第二版 (通过传入描述,明确哪里出现了问题)
    function expect (result) {
      return {
        toBe: function(actual) {
          if(result !== actual) {
            throw new Error(`预期值和实际值不相等 预期${actual} 结果却是${result}`);
          }
        }
      } 
    }
    
    function test(desc, fn) {
      try { 
        fn();
        console.log(`${desc} 通过了测试`);
      }catch(e) {
        console.log(`${desc} 没有通过测试 ${e}`);
      }
    }
    
    test('测试加法 3 + 7', () => {
      expect(add(3, 7)).toBe(10);
    })
    
    test('测试加法 3 - 3', () => {
      expect(minus(3, 3)).toBe(0);
    })
    

    刷新index.html页面,复制上方代码到控制台执行:

    通过优化,我们的测试结果可以详细的被获取到。通过测试代码就可以对我们编写的业务代码在上线之前,提前做一些测试,这就是我们自动化测试工具的实现原理。

    对自动化测试工具而言:这些测试并不用通过我们手工操作,而是通过一些写好的代码来帮我们运行的,这就叫做前端自动化测试。

    目前主流的自动化测试工具

    • Jest (从性能、功能、易用性方面都比较有优势)
    • Jasmine
    • Mocha+chai

    Jest的优势:

    • 速度快
      • (比如:有两个模块a和b, 两个模块互不关联,当我们第一次运行测试时,a和b都会运行。当我只改了a模块的代码,再重新运行这些测试的时候,Jest会只帮我们运行a模块的测试用例,不再运行b的测试用例。这样一来,就会从而提高执行效率,提升测试速度)
    • API使用起来较简单
      • API数量较少,简单学习下即可上手使用
    • 易配置
      • 安装之后,通过配置文件简单配置即可使用
    • 隔离性好
      • 每个测试文件执行时均相互隔离,避免了各测试单元的相互影响
    • 提供了监控模式(Jest23版本)
      • 更灵活的去运行我们的测试用例
    • IDE整合
      • 和我们使用的编辑器做融合,可以方便的在编辑器里做自动化测试
    • Snapshot快照功能
      • 快速编写测试用例
    • 多项目并行
    • 覆盖率
    • Mock丰富
    • 支持的技术栈比较丰富:Babel、Typescript、Node.js、React、Anguler、Vue.js等
    展开全文
  • Spring自动装配实现原理

    万次阅读 2018-03-02 08:29:46
    注意:spring框架默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中标签的autowire属性。 自动装配属性有6个值可选,分别代表不同的含义: byName 从Spring环境中获取目标对象时,目标对象...

    Java中使用注解的情况主要在SpringMVC(Spring Boot等),注解实际上相当于一种标记语言,它允许你在运行时动态地对拥有该标记的成员进行操作。注意:spring框架默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中标签的autowire属性。

    自动装配属性有6个值可选,分别代表不同的含义:

    byName
    从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找标签的id属性值。如果有相同的,那么获取这个对象,实现关联。整个Spring环境:表示所有的spring配置文件中查找,那么id不能有重复的。

    byType
    从Spring环境中获取目标对象时,目标对象中的属性会根据类型在整个spring环境中查找标签的class属性值。如果有相同的,那么获取这个对象,实现关联。

    缺点:如果存在多个相同类型的bean对象,会出错;如果属性为单一类型的数据,那么查找到多个关联对象会发生错误;如果属性为数组或集合(泛型)类型,那么查找到多个关联对象不会发生异常。

    constructor ->使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。

    autodetect
    ->自动选择:如果对象没有无参数的构造方法,那么自动选择constructor的自动装配方式进行构造注入。如果对象含有无参数的构造方法,那么自动选择byType的自动装配方式进行setter注入。

    no ->不支持自动装配功能

    default ->表示默认采用上一级标签的自动装配的取值。如果存在多个配置文件的话,那么每一个配置文件的自动装配方式都是独立的。

    展开全文
  • 主要为大家详细介绍了Java注解机制之Spring自动装配实现原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • cookie实现自动登陆原理

    千次阅读 2017-09-01 15:10:11
    cookie实现自动登录
  • 拓展一个点击按钮自动高亮的原理很简单,在点击的时候给元素加上一个自定义的attr,具体实现祥看本
  • 自动装箱和自动拆箱实现原理

    千次阅读 2019-03-06 15:58:41
    什么是自动装箱和拆箱 自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是...
  • 五点式全自动捆钞机的原理实现 [日期:2004-12-8] 来源:电子技术应用 作者:陈予吒 高 锋 [字体:大 中 小]   摘要:介绍了五点式全自动捆钞机的原理实现,并给出了相应的硬件结构框图和部分软件...
  • 约定优于配置,这是SpringBoot中的一个很重要特性,此特性让我们可以在几秒中之内完成一个项目的搭建,无需任何配置,本文就通过深入源码的方式来探索下自动配置的实现过程 为什么要自动配置 手动配置很麻烦且容易...
  • 桌面自动实现原理-RPA+

    千次阅读 2020-05-15 08:53:20
    RPA产品实现自动化从类型上大致可以分为桌面应用/浏览器应用/其它(Mainframe/Java等),本文将分析RPA或者自动化类工具实现桌面应用自动化的原理。 不管使用什么技术来执行自动化至少都得包含如下几个要素: 找...
  • NULL 博文链接:https://matchless1688.iteye.com/blog/1038302
  • vue的v-model是一个十分强大的指令,它可以自动让原生表单组件的值自动和你选择的值绑定, 我们来看一下它的效果: 输入框的值和一个数据是绑定的,输入框的值变化,和他绑定的值也会发生变化 我们可以参照官方文档的例子...
  • 第 5 章 MATLAB 在自动控制原理中的应用 1 第 5 章 MATLAB 在自动控制原理的应用 5.1 控制系统模型 5.2 控制系统的时域分析 5.3 控制系统的根轨迹 5.4 控制系统的频域分析 5.5 系统的状态空间分析函数 5.6 极点配置...
  • 兰 州 理 工 大 学 自动控制原理 MATLAB分析和设计 仿真实验报告 院系 电信学院 班级 自动化四班 姓名 周 媛 学号 09220433 时间 2011 年 11 月 22 日 电气工程和信息工程学院 第三章 线性系统的时域分析法 0.4s 1 P...
  • 本篇文章主要介绍了详解Java 自动装箱与拆箱的实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 软件自动实现原理

    千次阅读 2015-08-05 20:41:18
    1.软件自动实现原理和方法 直接对代码进行静态和动态分析 测试过程的捕获和回放 测试脚本技术 自动比较技术 虚拟用户技术和测试管理技术 2.自动实现过程 动态测试主要通过特定的程序来模拟软件的...
  • SpringBoot自动配置的原理实现

    万次阅读 多人点赞 2018-11-13 14:22:34
    SpringBoot自动配置的实现原理 SpringBoot的核心就是自动配置,自动配置又是基于条件判断来配置Bean。关于自动配置的源码在spring-boot-autoconfigure-2.0.3.RELEASE.jar 回顾配置属性 在通常需要我们在property中...
  • Spring Boot自动配置实现原理

    万次阅读 多人点赞 2018-08-24 11:38:37
    我们在使用Spring Boot构建Java Web项目的时候,实现起来非常的简单,那么SpringBoot是如何做到看似简单,却能够实现我们之前使用SSM或者SSH结合复杂配置实现的功能的呢? 我们在看Spring Boot的介绍的时候,常看到...
  • 自动控制理论及matlab实现课后答案 手写答案自动控制理论及matlab实现课后答案 手写答案 第二章
  • C#实现网页自动登录原理演示】

    热门讨论 2011-04-01 12:57:05
    网页自动登录(提交Post内容)的用途很多,如验证身份、程序升级、网络投票等,以下是用C#实现的方法。 网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 804,717
精华内容 321,886
关键字:

自动登录实现原理