剑指 Offer 22. 链表中倒数第k个节点

  1. // 1 2 3 4 6 2 => 1 2 3 6
  2. public ListNode getKNode(ListNode head,int k){
  3. ListNode slow = head, last = head;
  4. while(k>0 && last != null ) {
  5. slow = slow.next;
  6. k--;
  7. }
  8. if (slow !=null && first != null ){
  9. fast=fast.next;
  10. slow=slow.next;
  11. }
  12. slow.next=slow.next.next;
  13. return pre.next;
  14. }

数组里重复次数最多的值

  1. public int returnMost(int[] arr){
  2. if (arr == null || arr.length == 0) return 0;
  3. int Max = 0;
  4. int result = 0;
  5. HashMap<Integer,Integer> map = new HashMap<>();
  6. for (int i : arr) {
  7. //map.get(i) == null?map.put(i, 1): map.put(i, map.get(i) + 1);
  8. if (map.get(i) == null ){
  9. map.put(i,1);
  10. }
  11. else {
  12. map.put(i,map.get(i)+1);
  13. }
  14. if (map.get(i) >= Max) {
  15. Max = map.get(i);
  16. result = i;
  17. }
  18. }
  19. System.out.println(result);
  20. return result;
  21. }

sql 查询太慢,怎么优化

https://tech.meituan.com/2014/06/30/mysql-index.html

完整的http请求

过程

  • 域名解析
  • 发起TCP3次握手
  • 建立TCP连接后发起http请求
  • 服务器响应请求,返回结果
  • 浏览器得到html标签代码
  • 浏览器解析html代码中的资源,例如js,css,img等
  • 浏览器对页面进行渲染并呈现给用户

    为什么tcp需要第三次握手

    1. 谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。**本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接****。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了****。**采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”。**主要目的防止server端一直等待,浪费资源。**

登录页面测试链接

1、功能测试(Function test)

  • 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。
  • 输入错误的用户名或者密码, 验证登录会失败,并且提示相应的错误信息。
  • 登录成功后能否能否跳转到正确的页面
  • 用户名和密码,如果太短或者太长,应该怎么处理
  • 用户名和密码,中有特殊字符,和其他非英文的情况
  • 记住用户名的功能
  • 登陆失败后,不能记录密码的功能
  • 用户名和密码前后有空格的处理
  • 密码是否以星号显示

    2、界面测试(UI Test)

  • 布局是否合理,2个testbox 和一个按钮是否对齐

  • testbox和按钮的长度,高度是否复合要求
  • 界面是否好看
  • 图片,颜色,字体,超链接,是否都显示正确

    3、性能测试(performance test)

  • 打开登录页面,需要几秒

  • 输入正确的用户名和密码后,登录成功跳转到新页面,不超过5秒
  • 能支持多少个用户同时登陆

    4、安全性测试(Security test)

  • 登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)

  • 用户名和密码是否通过加密的方式,发送给Web服务器
  • 用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
  • 用户名和密码的输入框,应该屏蔽SQL 注入攻击
  • 用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
  • 错误登陆的次数限制(防止暴力破解)

    5、可用性测试(Usability Test)

  • 是否可以全用键盘操作,是否有快捷键

  • 输入用户名,密码后按回车,是否可以登陆

    6、兼容性测试(Compatibility Test)

  • 主流的浏览器下能否显示正常已经功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)

  • 不同的平台是否能正常工作,比如Windows, Mac
  • 移动设备上是否正常工作,比如Iphone, Andriod
  • 不同的分辨率
  • 不同的浏览器大小 (浏览器最大化, 和非最大化)

    索引的原理

    什么是索引

优点与缺点

原理

想要理解索引原理必须清楚一种数据结构「平衡树」(非二叉),也就是b tree或者 b+ tree,重要的事情说三遍:“平衡树,平衡树,平衡树”。当然, 有的数据库也使用哈希桶作用索引的数据结构 , 然而, 主流的RDBMS都是把平衡树当做数据表默认的索引数据结构的。


linux—

打印第二列

  1. awk '{print $2}' test.file
  2. # awk -F ":" '{print $2}' test2.txt : f 分割
  3. cut -d " " -f 2 test1.txt
  4. # cut -d ":" -f 2 test2.txt
  5. sed "s/^[^ ]* \([^ ]*\) [^ ]* [^ ]*/\1/g" test1.txt
  6. # sed "s/^[^:]*:\([^:]*\):[^:]*:[^:]*/\1/g" test2.txt

端口冲突

  1. ## 查看9000这个端口是否被使用
  2. netstat -lnt | grep 9000
  3. # # 根据端口查看进程信息
  4. lsof -i : 9000
  5. 结束占用端口的进程:killall 进程名
  6. 虽然我们不建议用这种本末倒置的方法来解决冲突问题,
  7. 但某些情况下还是可以直接结束掉占用进程的
  8. (比如重启Apache时进程没有完全退出,导致重启失败)

自动化测试的价值

case 选择的理由

性能测试

多态

https://www.cnblogs.com/chenssy/p/3372798.html