测试开发工程师从入门到入土全记录

1、编程能力

1.1、leetcode刷题记录

1.1.1、最长回文子串及题解

1.1.2、相关知识

1.1.2.1、substring 函数

Java中的substring函数是用来截取当前字符串的子串的。它有两种形式:public String substring(int beginIndex)public String substring(int beginIndex, int endIndex)。第一种形式用于提取从索引位置开始至结尾处的字符串部分,而第二种形式用于提取从索引位置开始到结束位置之间的字符串部分。例如,如果你想要提取字符串的前三个字符,你可以使用substring(0, 3)

1.1.2.2、charAt 函数

Java中的charAt函数用于返回指定索引处的字符。索引范围为从0到length()-1。例如,如果你想要获取字符串中第一个字符,你可以使用charAt(0)

1.1.2.3、boolean 类型

Java中的boolean类型是布尔型(逻辑型)数据类型,它只能是true和false,而不能用0和1代替,并且一定要小写。例如,你可以使用boolean myBoolean = true;来声明一个布尔变量。

1.1.2.4、动态规划

动态规划状态转移方程一般命名为dp,是因为dp是dynamic programming的缩写。他是一种分阶段求解决策略问题的数学思想,广泛应用于计算机科学、管理学、经济学、生物学等领域。
其核心思想为把一个复杂的问题分阶段简单化。动态规划包含三个重要概念:【最优子结构】、【边界】、【状态转移方程】。
参考:漫画:什么是动态规划?
单维度参数输入,可以看作是填一列表格;
双维度参数输入,可以看作是填n*n表格;

1.1.2.5、哈希表

哈希表(Hash table),也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。哈希表通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

1.1.2.6、临时变量

temp的中文意思是临时的、暂时的。临时变量通常被赋予temp,x或是其它一些模糊且缺乏描述性的名字。通常,临时变量是个信号,表明程序员还没有完全把问题弄清楚。
在编程中,临时变量是用于存储计算的中间结果,作为临时占位符,以及存储内务管理值。

1.1.2.7、new关键字

在Java中,使用关键字 new 来创建一个新的对象。例如,T1 a= new T1 (); 表示创建一个新的T1对象。在接口中使用时,T2 应该是一个接口类,T1T2 的实现类。例如,T2 b= new T1 (); 这种多用在接口类与实现类之间或子类与父类间。

当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能在常量池中能否定位到一个类的符号引用(即类的带路径全名),并且检查这个符号引用代表的类是否已被加载、解析和初始化过,即验证是否是第一次使用该类。

1.1.2.8、toCharArray() 函数

toCharArray() 函数用于将字符串转换为字符数组。该函数返回具有字符串长度的字符数组。它将字符存储在与定义的字符串中的字符相同的位置。

例如,String s="I am niuandidog"; char arr [ ]=s.toCharArray (); 将字符串对象中的字符转换为一个字符数组。

2、知识储备

2.1、进程与线程

进程和线程都是操作系统中的概念,进程是程序执行时的一个实例,而线程是进程中的一个执行单元。进程是资源分配的基本单位,而线程是CPU调度的基本单位。一个进程可以包含多个线程,这些线程共享该进程的所有资源,如内存空间等。线程之间共享进程中的数据,而进程之间互相独立.

2.2、 面向对象编程的三大基本特征

封装、继承和多态

2.2.1、 封装

封装是指将数据和方法包装在一起,以保护数据不被随意访问,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
封装的实现方式有很多种,其中一些方式包括:

  • 使用公共和私有方法,以封装实现细节和提供更好的代码组织;
  • 使用接口方法,以实现抽象,让对象更灵活、可扩展和更容易移植;
  • 使用多态方法,以快速实现对类的扩展和修改;
  • 使用命名空间,以避免冲突,在较大的代码库中更好组织代码。

2.2.2、 继承

继承描述的是两个类之间的关系,被继承的类称为父类,继承的类成为子类。子类可以继承父类的属性和方法,也可以重写父类的方法,实现自己的功能。子类对象具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为.
Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类(或叫基类、超类)。下面是一个简单的例子:

class Animal {
  public void move() {
    System.out.println("动物可以移动");
  }
}

class Dog extends Animal {
  public void move() {
    System.out.println("狗可以跑和走");
  }
}

public class TestDog {
  public static void main(String args[]) {
    Animal a = new Animal(); // Animal 对象
    Animal b = new Dog(); // Dog 对象

    a.move();// 执行 Animal 类的方法

    b.move();//执行 Dog 类的方法
  }
}

2.2.3、 多态

多态是同一个行为具有多个不同表现形式或形态的能力。在Java中,多态是指同一个方法调用,由于对象不同可能会产生不同的行为。
Java实现多态有三种方式:

  1. 接口实现
  2. 继承父类进行方法重写
  3. 同一个类中进行方法重载

2.3、链表

2.3.1、 链表是什么

链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针。简单来说,链表并不像数组那样将数组存储在一个连续的内存地址空间里,它们可以不是连续的。链表有很多种类型,例如单向链表、双向链表、循环链表等等。

2.3.2、 链表和数组的区别

链表和数组的区别如下:

  • 数组是一种线性数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据。而链表是一种非线性数据结构,它由若干个节点组成,每个节点包含两个部分:数据域和指针域。
  • 数组的长度是固定的,一旦定义了数组的长度,就不能再改变。而链表的长度是动态的,可以根据需要动态地增加或删除节点。
  • 数组的访问速度很快,可以通过下标直接访问任何一个元素。而链表的访问速度较慢,需要从头开始遍历整个链表才能找到指定的元素。
  • 数组在插入和删除元素时需要移动大量的元素,效率较低。而链表在插入和删除元素时只需要修改指针域即可,效率较高。

2.3.3、 链表的插入和删除操作怎么实现

链表的插入和删除操作如下:

  • 插入操作:在链表中插入一个节点,需要先找到要插入的位置,然后将新节点的指针指向下一个节点,再将上一个节点的指针指向新节点即可。
  • 删除操作:在链表中删除一个节点,需要先找到要删除的位置,然后将上一个节点的指针指向下一个节点即可。

2.3.4、 如何判断链表中是否有环

链表中有环是指链表中某个节点的next指针域指向的是链表中在它之前的某一个节点,这样在链表的尾部形成一个环形结构。
链表中是否有环,可以通过以下几种方法判断:

  1. 定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就包含环。
  2. 定义一个哈希表储存节点,遍历节点与哈希表中元素做对比。如果字典中存在该节点,说明链表中存在环;如果直到遍历结束,都未在字典中找到重复的节点,说明链表不存在环。
  3. 读取单项链表,每读一个数,将指针调向(原本是A->B,调完之后就是B->A),到最后如果有环一定是又回到了头指针,否则就没有。

2.3.5、 如何找到链表的中间节点

可以使用快慢指针来解决这个问题,定义两个指针,同时从链表的头节点出发,快指针一次走两步,慢指针一次走一步,当快指针到达链表的末尾时,慢指针就到达了链表的中间位置。

如果链表长度为偶数,则中间节点有两个,可以选择返回第一个或第二个。

3、趣味问答

3.1、绳子燃烧问题

——一根粗细不均匀的绳子,从头到尾烧完要一小时。如何作15分钟计时 ?
——【基本思想】:需要保持四个着火点;60 / 4 = 15。
【具体操作】:同时点燃绳子的AB两端和绳子的中间某部位(此后绳子变为两条),待其中一条燃烧完以后,再把另外一条绳子从中间点燃,循环以上操作,一直保持绳子有四个点在燃烧,直至绳子烧完,得到15分钟计时。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值