import java.util.Scanner; public class GCDLCM { //求最大公约数 public static int gcd(int a, int b) { while (b != 0) { int tmp = a % b; a = b; b = tmp; } return a; } //求最小公倍数 public static int lcm(int a, int b) { return Math.abs(a*b) / gcd(a, b); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int gcdFunc = gcd(a, b); int lcmFunc = lcm(a, b); System.out.println("最大公约数" + gcdFunc); System.out.println("最小公倍数" + lcmFunc); sc.close(); } }
1.线性结构就是在内存中连续存储,可以通过索引直接访问,比如数组;
链式结构就是在内存中不连续存储,通过指针连接元素,需要遍历节点才能访问,比如链表。
2.线性结构插入删除时需要移动大量元素,而链式结构插入删除不需要移动其他元素,只需要修改指针。所以线性结构的的插入删除时间复杂度可能较高,链式结构的插入删除时间复杂度较低。
3.线性结构的内存分配是静态分配,比如说数组,是在创建这个数组时就指定了大小,而链式结构的内存是动态分配的,每个元素分配独立的内存。
栈先进后出,队列先进先出。
100 continue表示指令已经接受正在处理,客户端不需要再次采取行动;
200ok,表示成功,指令正在处理。
3开头的表示重定向,意思就是需要客户端进行进一步操作才能完成请求,通常是需要重定向到另一个url;
4开头的是客户端错误,最常见的有404not found找不到请求的资源,403forbidden服务器拒绝执行请求,401unauthourized未授权,比如说登录服务端时必须提供有效的身份验证信息。
5开头的是服务端错误,最常见的有502bad gateway错误的网关,服务器作为网关或代理时从上游服务器收到无效响应。
1.get是为了获取数据,post是为了提交数据;
2.get的数据传递方式是URL查询字符串,post的数据传递方式是请求体传输数据,所以get数据暴露在url中容易泄露,而post数据藏在请求体中,从这个方面来说,post比get更安全一些。
3.幂等性,get只查询数据不对数据做修改,所以多次请求数据结果是幂等的;而post涉及到对数据的提交操作,可能会导致多次请求结果不同,是非幂等的。
4.用途不同,get经常用来请求数据,获取资源,比如获取网页;post经常用来提交表单、上传文件、修改资源,比如用户注册;
where 用于过滤原始数据
having用于过滤聚合结果,用在group by后面;
on用于定义连接条件,与join子句一起使用。
on和where的本质区别:不满足on的数据仍然会放在结果集中,但它们会显示为 NULL(因为连接没有找到匹配);而不满足where的数据不会放在结果集中。
当执行join时,on子句控制了哪些行将会被连接。如果数据不满足on的条件,连接操作仍然会发生,但这些行可能会变成NULL(如果是 LEFT JOIN 或 RIGHT JOIN 等连接类型)。
面试官和我掰扯了10分钟是用null还是none。。。
SELECT s.student_id, s.name, s.age FROM students s LEFT JOIN scores sc ON s.student_id = sc.student_id AND sc.course = 'Mathematics' WHERE sc.student_id IS NULL;
功能测试:
1.正常登陆测试,用一个有效的账号和密码,输入用户名输入密码点击登录按钮,预期结果是登陆成功,进入到用户的主页或者系统的主页面。
2.错误登陆测试,
用户名错误:输入一个不存在的用户名输入正确的密码,点击登录按钮,预期结果是显示“用户名或密码登陆错误”的提示信息,登陆失败。
密码错误:输入正确的用户名和错误的密码点击登录按钮,预期结果是显示“用户名或密码错误”的提示信息,登陆失败。
用户名和密码均错误:输入不存在的用户名和错误的密码点击登录按钮,预期结果是显示“用户名或密码”错误,登陆失败。
3.空用户名和空密码:输入空用户名和空密码点击登录按钮,预期结果是显示“用户名和密码不能为空”的提示信息,登录失败。
性能测试:
1.登陆系统的响应时间:输入正确的用户名和密码点击登录按钮,登陆操作效应时间应在一定的范围内,比如小于2秒。
2.并发登陆测试:多个用户比如100个同时尝试登陆,点击登录按钮,预期结果是系统能够承受并发登录请求,不会崩溃或者出现严重延时。
兼容性测试:
1.不同的浏览器:分别使用不同的浏览器如chrome、firefox等打开登陆页面,输入正确的用户名和密码,点击登录按钮,预期结果是在所有浏览器中登陆操作均能完成。
2.不同的移动端:在手机浏览器中打开登陆页面,检查页面是否适配不同的屏幕尺寸,输入正确的用户名和密码点击登录按钮。预期结果是页面能适应不同的屏幕尺寸,用户能够正常进行登录。
安全性:
1.SQL注入:在用户名和密码输入框中输入常见的SQL注入代码,比如’ OR 1=1 --,点击登录按钮,预期结果是系统防止SQL注入攻击显示登陆失败的提示。
2.是否使用https协议,在浏览器中打开登陆页面,检查浏览器的地址栏,确认url是以https开头的而不是http,点击开发者工具f12,查看network标签中的请求,确认所有与用户登录相关的请求比如提交表单都使用https协议。
3. 密码应该是密文传输的,使用f12或者抓包工具进行抓包,提交登录请求观察密码在请求中的传输情况,确认密码字段是否已经加密。预期结果是密码在请求中是加密的,不能以明文形式出现在http请求体中。
4.密码应该是密文存储的,在注册并成功登陆后,访问数据库或后端存储的密码字段,确认存储的密码是经过加密处理的,避免明文存储密码。预期结果是密码应该不会以明文形式出现在数据库中。
5.检查密码强度:在注册或者修改密码的时候,检查密码强度是否足够严格,输入弱密码比如1234或者password并提交,预期结果是系统应提示用户设置一个强密码,包括大写字母、小写字母、数字和特殊字符,且长度至少为8-12个字符。
6.暴力破解防护:
在用户名和密码框中输入错误的用户名和密码多次,比如5次以上,点击登录按钮,预期结果是一天应该限制连续失败的登录尝试,比如5次失败以后锁定一段时间,并显示相应的提示信息比如“账户锁定,稍后再试”。
UI设计和界面功能测试
1.UI设计要合理美观,输入框大小合适位置合适;
2.有一个“记住我”功能,输入有效的用户名和密码之后,勾选“记住我”复选框点击登录按钮,预期结果是登陆成功,并且下次访问时自动登录。
2.有“忘记密码”功能,点击忘记密码链接,输入注册时的手机号或者邮箱点击提交按钮,预期结果是系统发送重置密码的链接或验证码到用户的邮箱或者手机。
3.输入框字符限制,在用户名和密码输入框中输入超过最大字符限制的字符,比如50个字符,点击登录按钮,预期结果是系统限制输入的最大字符数,不允许超出最大字符限制。
4.密码输入框的隐藏显示功能,输入密码点击显示密码的图标,预期结果是密码在输入框中显示,点击后再次隐藏。
5.用户名和密码字段聚焦:打开登陆页面,确保登录焦点自动定位到用户名输入框,输入用户名和密码点击登录按钮,预期结果是焦点默认在用户名输入框,能够顺利进行。
#牛客创作赏金赛##松鼠ai#