• study



    typora-root-url: typora-picture

    一、概念

    FAT Functional Acceptance Testing 开发、测试环境

    FWS Functional Web Service

    1、sql注入

    Select * from news where title like '%#{title}%'
    # 但由于这样写程序会报错,研发人员将SQL查询语句修改如下:
    Select * from news where title like '%${title}%'
    # 在这种情况下我们发现程序不再报错,但是此时产生了SQL语句拼接问题,如果java代码层面没有对用户输入的内容做处理势必会产生SQL注入漏洞。
    # 可将SQL查询语句设计如下:
    select * from news where tile like concat('%', #{title}, '%')
    # 采用预编译机制,避免了SQL语句拼接的问题,从根源上防止了SQL注入漏洞的产生。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、ThreadLocal

    优点就是:简单,方便。可以把它想象成一个不用考虑缓存未命中情况的redis(同线程下)。

    主要用途:1、传递参数。部分场景下,参数特别难以传递(比如:AOP中的变量传递到业务逻辑代码中)。此时用它就比较方便。

    ​ 2、精简参数传递。有时候某些方法参数列表的参数个数特别多,把业务参数和一些辅助参数(又叫周边)混杂在一起,导致代码难以理解。此时可以同意把这些辅助参数放在ThreadLocal里,统一设置的context。

    注意点:1、ThreadLocal不能跨线程。

    ​ 2、设置的数据在读取之后一定要记得删除,不然由于线程池的原理,导致下次此线程再读取此数据时可能时返回的是上次该线程保存的数据,导致数据紊乱。

    3、extends、implement、Override、Overload

    继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

    在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

    使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

    重写(Override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

    重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

    每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

    最常用的地方就是构造器的重载。

    4、transient

    transient是短暂的意思。对于transient 修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。

    (1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法被访问。
    (2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
    (3)一个静态变量不管是否被transient修饰,均不能被序列化(如果反序列化后类中static变量还有值,则值为当前JVM中对应static变量的值)。序列化保存的是对象状态,静态变量保存的是类状态,因此序列化并不保存静态变量。

    5、线程池

    6、HTTP、TCP

    7、socket

    8、代理

    9、反射

    10、Calendar

    11、this

    this首先是一个对象,它代表调用这个函数的gits git对象。

    12、==、equals

    13、Stream流

    二、安全

    1、xss(Cross Site Script Attack)跨站脚本攻击

    来自应用安全国际组织OWASP的建议,对XSS最佳的防护应该结合以下两种方法:验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。具体如下:

    • 输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。
    • 输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。

    明确指定输出的编码方式:不要允许攻击者为你的用户选择编码方式(如ISO 8859-1或 UTF 8)。

    2、SSRF(Server-Side Request Forgery:服务器端请求伪造)

    SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

    • 1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
    • 2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
    • 3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。
    • 4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
    • 5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

    3、sql注入

    Select * from news where title like '%#{title}%'
    # 但由于这样写程序会报错,研发人员将SQL查询语句修改如下:
    Select * from news where title like '%${title}%'
    # 在这种情况下我们发现程序不再报错,但是此时产生了SQL语句拼接问题,如果java代码层面没有对用户输入的内容做处理势必会产生SQL注入漏洞。
    # 可将SQL查询语句设计如下:
    select * from news where tile like concat('%', #{title}, '%')
    # 采用预编译机制,避免了SQL语句拼接的问题,从根源上防止了SQL注入漏洞的产生。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    三、GIT

    git config user.name
    git config user.email
        
    git config --global user.name "username"
    git config --global user.email "email"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    GIT的三个工作区域

    本地数据(仓库)目录,工作目录,暂存区

    img

    一般流程

    1. git clone ….( 复制一个已创建的仓库)
    2. git pull (拉取最新代码)
    3. git add . (把当前所有修改添加到下次提交中,针对新增文件)
    4. git commit -a -m ‘message here’ (提交本地的所有修改)
    5. git push (将本地分支的更新,推送到远程主机)

    常用命令

    • git branch branchName(在本地创建一个命名为branchName的分支)
    • git branch 查看当前自己所在的分支
    • git checkout (切换分支)
    • git checkout -b 创建一个新的分支同时切换到新创建的分支
    • git push origin branchName(把命名为branchName的本地分支推送到服务器)
    • git pull origin branchName (从远程分支上拉取代码)
    • git merge 合并
    • git rebase 线性合并
    • git stash 暂存
    • git stash pop 恢复暂存
    //本地修改
    显示工作路径下已修改的文件:git status
    显示与上次提交版本文件的不同:git diff 
    把当前所有修改添加到下次提交中:git add . 
    把对某个文件的修改添加到下次提交中:git add -p <file> 
    提交本地的所有修改:git commit -a 
    附加消息提交:git commit -m 'message here' 
    提交历史从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间):git log 
    显示所有提交(仅显示提交的hash和message):git log --oneline
    显示某个用户的所有提交:git log --author="username" 
    显示某个文件的所有修改:git log -p <file>
    //分支与标签
    列出所有的分支:git branch 
    切换分支:git checkout <branch>
    基于当前分支创建新分支:git branch <new-branch> 
    基于远程分支创建新的可追溯的分支:git branch --track <new-branch> <remote-branch> 
    删除本地分支:git branch -d <branch> 
    给当前版本打标签:git tag <tag-name> 
    //更新与发布
    列出对当前远程端的操作:git remote -v 
    显示远程端的信息:git remote show <remote> 
    添加新的远程端:git remote add <remote> <url> 
    下载远程端版本,但不合并到HEAD中:git fetch <remote> 
    下载远程端版本,并自动与HEAD版本合并:git remote pull <remote> <url> 
    将远程端版本合并到本地版本中:git pull origin master 
    将本地版本发布到远程端:git push remote <remote> <branch> 
    删除远程端分支:git push <remote> :<branch> (since Git v1.5.0) or git push <remote> --delete <branch> (since Git v1.7.0) 
    发布标签:git push --tags 
    //合并与重置
    将分支合并到当前HEAD中:git merge <branch> 
    将当前HEAD版本重置到分支中:git rebase <branch> //Don't rebase published commit!
    退出重置:git rebase --abort 
    解决冲突后继续重置:git rebase --continue 
    使用配置好的merge tool 解决冲突:git mergetool 
    在编辑器中手动解决冲突后,标记文件为已解决冲突:git add <resolved-file>  git rm <resolved-file> 
    //撤销
    放弃工作目录下的所有修改:git reset --hard HEAD 
    移除缓存区的所有文件(i.e. 撤销上次git add):git reset HEAD 
    放弃某个文件的所有本地修改:git checkout HEAD <file> 
    重置一个提交(通过创建一个截然不同的新提交)git revert <commit> 
    将HEAD重置到上一次提交的版本,并放弃之后的所有修改:git reset --hard <commit> 
    将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改:git reset <commit> 
    将HEAD重置到上一次提交的版本,并保留未提交的本地修改:git reset --keep <commit>
    当与别人和作开发时,会向别人贡献代码或者接收别人贡献的代码,有时候可能不想完全Merge别人贡献的代码,只想要其中的某一个提交,这时就可以使用:git cherry-pick <commit-id>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    未添加到缓存区的修改:git reset
    将HEAD重置到上一次提交的版本,并保留未提交的本地修改:git reset --keep
    当与别人和作开发时,会向别人贡献代码或者接收别人贡献的代码,有时候可能不想完全Merge别人贡献的代码,只想要其中的某一个提交,这时就可以使用:git cherry-pick

    
    
    • 1
  • 相关阅读:
    MaixII-Dock(v831)学习笔记——GPIO
    数据结构:线性表(队列实现)
    【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)
    IF 22.1,中科院1区TOP,顶级期刊更名!
    minio 单机版安装
    游戏模板:MFPS 2.0: Multiplayer FPS
    [LeetCode周赛复盘] 第 322 场周赛20221204
    敏捷开发模式下如何快速提升产品质量
    STM32学习之Keil5软件配置
    [CG] 用 Docker 配置 Ubuntu OpenGL 环境
  • 原文地址:https://blog.csdn.net/qq_33288796/article/details/125895680