download:GO进阶训练营

Q:参加 Go 进阶训练营,需要具备什么基础?
需要掌握 Go 语言基础语法,并具备一定的 Go 语言相关项目开发经验。

Q:学完课程后能到什么水平?
Go 进阶训练营课程设计对标字节跳动 2-2 级胜任力模型,教学贴近大厂真实场景。课程中的实践驱动,不仅可以系统提升你的代码硬实力,同时也会培养你进入一线互联网大厂必备的思维能力。
我们的课程培养目标是大厂的资深 Go 工程师、高级 Go 开发工程师、Go 技术专家。按照老师系统性的规划,用心学习,可以帮你摆脱低效和痛苦的自学,事半功倍,学完后可以达到一线互联网大厂中高级 Go 开发工程师的水平。

哪些人适合报名 Go 进阶训练营?

2 年以上工作经验,在理论和技术方面有进阶学习需求的 Go 语言工程师;
其它语言转 Go(比如 Java )的工程师,用 Go 写过简单的项目,但工作中用 Go 写中大型的复杂项目比较吃力
SQL注入

SQL注入是效勞器端未嚴厲校驗客戶端發送的數據,而招致效勞端SQL语句被歹意修正並勝利執行的行爲。

實質:把用戶輸入的數據當作代码執行。任何和數據庫產生交互的中央便有可能存在注入.

SQL注入類型
數據傳輸: GET POST COOKIE

數據類型: 整型 字符型

注入形式: 結合查询 報錯 佈爾盲注 時間盲注 推查询

SQL注入的普通步骤
判別能否有注入
可控參數的改動能否影響頁面的結果。
輸入的SQL语句能否能報錯.---->經過數據庫報錯,看到數據庫的语句痕跡。
輸入的SQL语句能否不報錯.---->语句可以勝利閉合。
判別注入類型
语句能否可以被歹意修正
能否可以執行
獲取我們想要的數據
SQL注入的根底學問
數據庫構造
數據庫---->表---->字段---->值

SQL5.0版本之後MySQL默許在數據庫中寄存一個“information_schema”的數據庫,在該庫中有三個重要的表名schemata,tables,columns。

schemata表存儲該用戶創立的一切數據庫的庫名,字段名爲schema_name。

tables表存儲該用戶創立的一切數據庫的庫名和表名,數據庫庫名和表名字段分別爲table_schema,table_name。

columns表存儲一切的庫名,表名,字段名,它們的字段名分別爲table_schema,table_name,column_name。

查询语句
select 要查询的字段名 from 庫名.表名
select 要查询的字段名 from 庫名.表名 where 已知條件的字段名 = '已知條件的值'
select 要查询的字段名 from 庫名.表名 where 已知的條件字段名1 = '已知條件的值1' and 已知條件2的字段名 = '已知條件2的值'
limit用法
limit m,n
m表示記载開端的位置,從0開端表示第一條記载;n指取n條記载。

重要的函數
database() 當前網站運用的數據庫。
version() 當前的MySQL版本。
user() 當前MySQL的用戶。
@@datadir 數據庫途径。
@@version_compile_os 操作係統版本
concat(str1,str2,...) 沒有分隔符地衔接字符串
concat_ws(separator,str1,str2,...) 含有分隔符地衔接字符串
group_concat(str1,str2,...) 衔接一個組的一切字符串,並以逗號分隔每一條數據
注释符
常見的注释表達方式爲:# --空格 /**/
在url中表示爲: %23 --+

對條件字段做函數操作走不了索引。

select * from t1 where date© =‘2019-05-21’;
優化:改成範圍查询

select * from t1 where c>=‘2019-05-21 00:00:00’ and c<=‘2019-05-21 23:59:59’;
隱式轉換
操作符與不同類型的操作對象一同運用時,就會發作類型轉換以使操作兼容。

select user_name,tele_phone from user_info where tele_phone =11111111111; / tele_phone varchar /
實践會做函數操作:

select user_name,tele_phone from user_info where cast(tele_phone as singed int) =11111111111;
優化:類型統一

select user_name,tele_phone from user_info where tele_phone =‘11111111111’;
含糊查询
通配符在前面

select * from t1 where a like ‘%1111%’;
優化:含糊查询必需包含條件字段前面的值

select * from t1 where a like ‘1111%’;
範圍查询
範圍查询數據量太多,需求回表,因而不走索引。

select * from t1 where b>=1 and b <=2000;
優化:降低單次查询範圍,分屢次查询。(實践可能速度沒得快太多,倡議走索引)

select from t1 where b>=1 and b <=1000;
show profiles;
±---------±-----------±-----------------------------------------+
| Query_ID | Duration | Query |
±---------±-----------±-----------------------------------------+
| 1 | 0.00534775 | select from t1 where b>=1 and b <=1000 |
| 2 | 0.00605625 | select * from t1 where b>=1 and b <=2000 |
±---------±-----------±-----------------------------------------+
2 rows in set, 1 warning (0.00 sec)
計算操作
即便是简單的計算

explain select * from t1 where b-1 =1000;
優化:將計算操作放在等號後面

explain select * from t1 where b =1000 + 1;

在MongoDB中OjbectId 类型Json序列化反序列化会出错,可以通过以下两种方式解决

1、最简单粗暴的方法,从新定一个一个业务主键比如key,这样的话等于之前的_id不起作用了

2、使用JsonConverter

public class ObjectIdConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(ObjectId);
}

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    {        if (reader.TokenType != JsonToken.String)        {            throw new Exception(                String.Format(&quot;Unexpected token parsing ObjectId. Expected String, got {0}.&quot;,                              reader.TokenType));        }        var value = (string)reader.Value;        return String.IsNullOrEmpty(value) ? ObjectId.Empty : new ObjectId(value);    }    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    {        if (value is ObjectId)        {            var objectId = (ObjectId)value;            writer.WriteValue(objectId != ObjectId.Empty ? objectId.ToString() : String.Empty);        }        else        {            throw new Exception(&quot;Expected ObjectId value.&quot;);        }    }}

在ObjectId字段上加一行代码即可

[JsonConverter(typeof(ObjectIdConverter))]
public string _id { get; set; }
如果使用Newtonsoft的JsonConvert的话,还需要额外加上参数

JsonConvert.DeserializeObject<xxxx>(json,new ObjectIdConverter());

3、通过Ignore,一种很有技巧性的写法

[JsonIgnore]
public override ObjectId _Id { get; set; }

[BsonIgnore]
public string _IdStr
{
get
{
return Id.ToString();
}
set
{
ObjectId id;
ObjectId.TryParse(value, out id);
Id = id;
}
}

©著作权归作者所有:来自51CTO博客作者mb605031094d813的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. [go-linq]-Go的.NET LINQ式查询方法
  2. 数据湖风暴来袭,EMR重磅发布Apache Hudi
  3. iOS开发进阶之路,打破平庸,杜绝淘汰!
  4. flea-frame-db使用之JPA接入
  5. flea-frame-db使用之JPA封装介绍
  6. Flutter高级进阶实战 仿哔哩哔哩APP
  7. iOS逆向与安全
  8. 算法训练营
  9. PyTorch入门到进阶 实战计算机视觉与自然语言处理项目

随机推荐

  1. 关于使用框架操作Oracle数据库切换MySQL
  2. SQLServer 延迟事务持久性
  3. 修改sqlserver 2008 express为混合认证模
  4. linux ,cron定时任务 备份mysql数据库
  5. 动态执行sql问题
  6. SQL SERVER 日志已满的处理方法
  7. mysql 5.7 安装错误提示总结
  8. MySQL——问题:mysql(5.7版本)目录下没有d
  9. 命令提示符下怎样停止和启动 SQL Server
  10. SQL SERVER日志文件已满处理方法