The path to the driver executable must be set by the webdriver.edge.driver system property selenium设置驱动
cookie 和session 首先明确HTTP是一个无状态的协议(这里的无状态指的是对处理事务没有记忆能力,每次客户端和服务端完成会话之后,服务端不会保存任何的会话信息):每一次的请求都是完全独立的,服务端无法确认当前访问者的身份信息(我只知道你让我干什么,但是我不知道你是谁),所以服务端为了进行会话跟踪(知道是谁在让我做事),就要进行一系列的操作来明确不同的请求是否来自于同一个浏览器,那这个操作就需要通过cookie和session来去实现。cookie :cookie是存储在客户端的,它是服务器发送给浏览器并且保存在客户..
Java对象类型转换:向上转型和向下转型 向上转型父类引用指向子类对象称为向上转型其实就是把子类对象直接赋给父类引用,不用进行强制转换。使用向上转型可以调用父类类型中的所有成员,在进行编译时会进行静态绑定,对象与指定的类型进行方法绑定调用某个方法,究竟执行哪一段方法,要看这个引用指向的是父类还是子类对象,这个过程是在运行时决定的,因此称为 动态绑定。向下转型与向上转型相反,子类对象指向父类引用就是向下转型向下转型可以是调用子类类型中的所有成员,不过需要注意的是如果父类引用对象指向的是子类对象,那么在向下转型的过程的过程中
JVM垃圾处理方法 目录标记-清除算法不足之处:复制算法优缺点:复制算法的空间分配担保标记整理算法标记-清除算法这个算法是最基础的垃圾处理算法,算法分为 标记 清除 两个阶段:首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象,后续的所有算法都是对这种算法的改进不足之处:①效率不高:标记和清除都没有很高的效率②空间问题:标记清除后会产生大量的不连续的内存碎片,空间碎片会导致在程序运行时如果需要较大内存的对象的时候没有足够的连续内存,所以又得再一次...
常见的锁策略 乐观锁和悲观锁乐观锁:乐观地认为数据一般不会产生并发冲突,所以再在正式提交更新的时候才会对是否发生冲突进行检测,如果发生冲突,则让返回用户错误的信息,让用户决定如何去做悲观锁:悲观地认为每次拿数据的时候都会被别人修改,所以每次拿数据的时候都会上锁,别人想要拿到这个这个数据就必须等到锁释放。乐观锁只能适用于冲突较少的场景悲观锁由于需要竞争锁,所以性能不高读写锁多线程之间,如果只是涉及到读操作的话不会引起线程安全的问题,但数据的写入和读之间都需要进行互斥。如果都加锁,会产生极大的性能损耗
关于线程的一些操作 获取当前线程的引用对象Thread.currentThread();返回当前对象的引用休眠当前线程①Thread.sleep(long mills)②Thread.sleep(long mills,int nanos)
线程的生命周期 新建和就绪状态当使用new关键字创建了一个线程之后,该线程就处于新建状态,此时Java虚拟机就会给他分配内存,并且初始化成员变量的值。当对象调用了start()方法之后,这个程序就会处于就绪状态,它就有了自己的方法调用栈和程序计数器,处于这个状态的线程并不是立即开始运行,至于什么时候运行取决于调度器。...
start 和 run 启动线程时我们使用的时start()方法,而不能使用run()方法;调用start()方法时,系统会将run()方法作为线程执行体系来进行处理调用run()方法时,run()方法会直接运行,而在run()方法执行结束之前其他的线程无法并发执行也就是说,如果直接调运run()方法,系统会把线程对象当作一个普通对象,而不是线程对象此时的run()方法就是一个普通方法,不是线程的执行体系。...
进程和线程 定义:几乎所有的操作系统都支持同一时间执行多个任务,这个任务通常就是一个程序,当一个程序运行时,可能会有多个执行流,那我们就可以认为,程序就是就是一个进程,每个执行流就是一个线程。进程和线程之间的关系:线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须拥有它的父亲进程。 线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,可以与其他线程共享进程所拥有的资源。通过相互之间的配合来完成进程所要完成的任务。 线程是独立运行的,它并不直到是否有其他线程的存在,线程 的执行是抢占式..
接口interface 接口的概念:如果说抽象类是多个类抽象出来的模板,那么接口就是更加抽象的“抽象类”,即规范,在接口中,不能包含普通方法,只能包含抽象方法。定义接口的时候,我们使用的是interface关键字,基本语法如下:{修饰符}interface 接口名 extends 接口1,接口2{常量;抽象方法;内部类;默认方法,类方法;....}接口的修饰符可以是public或者省略,省略的话默认default,包访问限制,即只有在相同的包里面才能进行访问 一个接口可以继承多个接口,但是接口只
abstract抽象类 在我们定义某一个类的时候,往往会为这些类定义一些方法,这些方法用于描述该类的行为,都有具体的方法体。在发生继承时,父类只直到子类应该继承哪些方法,但是并不直到子类是如何实现这些方法的(重写)。既然不知道子类时如何实现这些方法的,那么干脆就可以不用管,使用只有方法名,而没有实现方法的抽象方法。抽象方法和抽象类:必须用abstract修饰符来进行修饰,有抽象方法的类只能被定义为抽象类,抽象类里面可以没有抽象方法。 抽象方法必须没有方法体 抽象类不能被实例化 抽象类可以包含成员变量,方法(这里的
Java的访问控制符 Java提供了三个访问控制符:private、protect、public,还有一个不加任何任何访问控制符的访问控制级别 default,一共就是4个访问控制级别。java的访问控制级别由小到大如下所示:注意:default并没有对应的访问控制符,当没有访问控制符来修饰类或者类成员时,系统默认使用default修饰。四个访问控制级别的具体介绍如下:private(当前类访问)如果类里的一个成员(包括成员变量、方法和构造器等)使用private访问修饰符来修饰,则这个成员变量只能在当.
可以重写static方法和private方法吗 当然是不能的static方法 可以被继承,但是不能被重写首先static方法是编译时静态绑定的,而方法重写时基于运行时动态绑定的。static方法跟类的实例无关,只跟类有关虽然不能被重写,但是可以被继承 ,可以在子类中通过 父类类名.方法名 的形式进行访问,如果父类和子类中拥有相同名称和参数的静态方法,那么该子类其实是隐藏了从父类继承过来的静态方法,这是属于子类自己的方法,而不是重写。通俗的讲就是,这两个方法是两个没有关系的方法,具体调用哪个就要看是哪个对象的引用,不存在多态的性质.
重载和重写的区别 重载:定义:编译时多态,即同一个类中具有多个名字相同的方法。这些方法具有不同的参数列表,不能根据返回值类型进行区分;就是:针对同一个类,方法名相同方法参数不同(个数和类型不受限制)至于其他部分(返回值类型,修饰符等)跟重载没有关系示例:public class Main { public static void test(){ System.out.println("无参数的test方法"); } public
二叉树习题 一、判断两个二叉树是否相同100. 相同的树 - 力扣(LeetCode) (leetcode-cn.com)如果当前节点都为null,返回true;如果有一个为null,另外一个不为null,返回false;如果对应位置的val不同,返回fasle;递归遍历左子树和右子树。public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null&&q==null)return true; .
二叉树的前序中序后序遍历 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作 依赖于具体的应用问题(比如:打印节点内容、节点内容加1)。 遍历是二叉树上最重要的操作之一,是二叉树上进 行其它运算之基础。在遍历二叉树时,如果没有进行某种约定,每个人都按照自己的方式遍历,得出的结果就比较混乱,如果按照某种 规则进行约定,则每个人对于同一棵树的遍历结果肯定是相同的。如果N代表根节点,L代表根节点的左子树,R代 表根节点的右子树,则根据遍历根节点的先后次序有以下遍历方式:
微信红包测试用例 针对私发红包:1.功能①红包钱数精度为两位小数,直接输入小数点会不会自动补0,当输入钱数为0时,“塞钱进红包”置为灰色②红包输入的前述超过最大钱数时是否会有提示③红包描述可以输入正常字符,是否可以输入数字,汉字,英文,表情,检查他们是否可以任意搭配,各种字符最多的限制是多少,在输入后,是否可以进行修改④红包的金额数字,描述是否可以复制粘贴⑤点击塞钱进红包是否可以跳出支付界面⑥是否可以选择支付方式,余额不足的时候会不会自动匹配⑦是否支持密码和指纹支付密码输入错误是否会提示,指纹验证错误是否会提
JDK、JRE、JVM JDK(JavaDevelopmentKit):是Java开发工具包,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。 JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。通过它,J...
面向对象的三大特性 封装、继承、多态 封装:通常认为封装是把数据和操作数据的方法封装起来,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的方法实现对内部信息的操作和访问。封装是面向对象编程语言对客观世界的模拟,在客观世界里,对象的状态信息都被隐藏在对象内部,外界无法直接做出修改。对一个类实现良好的封装,可以实现以下目的:①隐藏类的实现细节②让使用者只能使用预先提供的方法进行访问,从而可以在实现方法时加入一些逻辑,限制不合理访问③可以进行数据检查,有利于保证数据的完整性和可维护性
什么是面向对象?面向对象和面向过程的区别 面向对象的编程是以对象为中心,以消息为驱动。面向对象是一种基于面向过程的编程思想,是计算机向现实世界模型的自然延伸,说白了就是“万物皆对象”。在现实世界中任何一种物体都可以归为一类是事物,而每一个个体都是一类事物的实例,这就是类和实例。面向对象编程与面向过程编程的区别:①编程思路不同:面向过程以实现功能的函数开发为主,使用函数来实现功能面向过程要首先抽象出类,类的属性,类的方法,然后通过实例化对象来完成功能②封装性:二者都具有封装性,但是面向过程封装的是类,面向过程封