SQL注入
在浏览器页面用户提交数据处,输入特定的字符实现sql语句的篡改,从而对数据库进行操作。比如在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录;用户名处, 'or 1 = 1 – –。在后台如果无特殊处理,会有这样的sql语句:
String sql = "select * from user_table where user_name='"+user_name+"' and pass_word='"+password+"';"
复制代码
将特殊的user_name读入后语句成为:
String sql = "select * from user_table where user_name='' or 1 = 1 -- 'and pass_word='"+password+"';"
复制代码
此处的条件判断中1=1是永远成立,后面的密码判断被 -- 注释掉了,因此直接免密登录。
解决办法比较方便的就是,在页面提交数据时进行字段检查,过滤特殊的指定字符集,避免sql注入的字符串传递至服务器。
react中hooks的优缺点
优点:自定义hooks可实现状态复用,解决了类式组件有时候难以复用逻辑的问题
每调用一次useHook都会生成一份独立状态,因为它就是一个函数。虽然状态(from useState)和副作用(useEffect)都需要依赖组件,但是可以在组件之外定义,这是类式组件无法实现的,因为你无法在组件外定义state。
缺点: useEffect容易与其他函数间产生链式依赖,其中一个步骤的数据意外改变会导致你的useEffect也改变。
在存在异步代码时,useEffect容易由于形成闭包而发生旧引用问题
cookie,SessionStorage,LocalStorage的区别
cookie: 纯文本形式保存在浏览器本地,可以通过设置其最大生存时长进行删除,容量较小,最大为4KB。每一次向服务器请求都会携带上cookie,因此建议放少量必须数据,否则每次请求消耗不必要的带宽。
SessionStorage: 用于临时保存同一窗口(或标签页)的数据,一般存储键值对,在关闭窗口或标签页之后将会删除这些数据,其大小可达5M。
LocalStorage: 没有时间限制可以一直保存在本地,直到你手动去删除它。
BFC
Block Formatting Contexts (块级格式化上下文)
具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性:同一个BFC元素中外边距会发生重叠;BFC可以包含浮动元素,不会失去高度。
开启BFC的方式:
1、绝对定位 position: absolute
2、overflow设置为非默认值(visible),通常设置为 Hidden,因为影响最小
3、设置元素浮动
4、设置display: inline-block
合并二叉树
已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。
function mergeTrees(t1,t1){
if(!t1) return t2
else if(!t2) return t1
else return t1.val += t2.val
t1.left = mergeTrees(t1.left,t2.left)
t1.right = mergeTrees(t1.right,t2.right)
return t1
}
标签:BFC,知识点,cookies,t2,t1,user,sql,二叉树
From: https://www.cnblogs.com/chentleman/p/16730469.html