ARTS:

  • Algrothm: leetcode算法题目
  • Review: 阅读并且点评一篇英文技术文章
  • Tip/Techni: 学习一个技术技巧
  • Share: 分享一篇有观点和思考的技术文章

Algorithm

【leetcode】Unique Morse Code Words

https://leetcode.com/problems/unique-morse-code-words/

1)problem

  1. International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows: "a" maps to ".-", "b" maps to "-...", "c" maps to "-.-.", and so on
  2. For convenience, the full table for the 26 letters of the English alphabet is given below:
  3. [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
  4. Now, given a list of words, each word can be written as a concatenation of the Morse code of each letter. For example, "cba" can be written as "-.-..--...", (which is the concatenation "-.-." + "-..." + ".-"). We'll call such a concatenation, the transformation of a word.
  5. Return the number of different transformations among all words we have.
  6. Example:
  7. Input: words = ["gin", "zen", "gig", "msg"]
  8. Output: 2
  9. Explanation:
  10. The transformation of each word is:
  11. "gin" -> "--...-."
  12. "zen" -> "--...-."
  13. "gig" -> "--...--."
  14. "msg" -> "--...--."
  15. There are 2 different transformations, "--...-." and "--...--.".
  16. Note:
  17. The length of words will be at most 100.
  18. Each words[i] will have length in range [1, 12].
  19. words[i] will only consist of lowercase letters.

2)answer

将26个因为字母映射为摩斯电码,然后根据每组字母每个字符对应的摩斯电码组合起来。至于那个简写是为什么可以那么写,没搞清楚。【"cba" can be written as "-.-..--...", (which is the concatenation "-.-." + "-..." + ".-").】

3)solution

  1. #include "pch.h"
  2. #include <stdio.h>
  3. #include <string>
  4. #include <vector>
  5. #include <unordered_set>
  6. using std::string;
  7. using std::vector;
  8. using std::unordered_set;
  9. class Solution {
  10. public:
  11. int uniqueMorseRepresentations(vector<string>& words) {
  12. vector<string> morse_code = { ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.." };
  13. // vector<string> store;
  14. unordered_set<string> result_val;
  15. int count = 0;
  16. for (auto str: words)
  17. {
  18. string tmp;
  19. for (auto ch: str)
  20. {
  21. //-'a'是找到输入字的索引。例如,'a' - 'a'为0.所以'a'对应于morse_code中的第一个元素。
  22. tmp += morse_code[(int)ch - (int)('a')];
  23. }
  24. result_val.insert(tmp);
  25. }
  26. return result_val.size();
  27. }
  28. };
  29. int main()
  30. {
  31. vector<string> words;
  32. words.push_back("cba");
  33. // 使用内容
  34. Solution nSolution;
  35. nSolution.uniqueMorseRepresentations(words);
  36. }

Review

【漏洞挖掘】SQL 注入攻击防御方案

https://www.netsparker.com/blog/web-security/fragmented-sql-injection-attacks/

1)场景

SQL注入产生的原因,怎么防护

2)问题难点

  • SQL注入是什么?
  • 怎么解决?

3)解决问题的方法

  • SQL注入是什么:

在系统(例如命令解释器,文件系统或数据库管理系统)中,具有特殊含义的字符称为元字符。例如,在SQL查询上下文中,单引号和双引号用作字符串分隔符,它们在字符串的开头和结尾都会被使用。当字符串中含有单引号和双引号,可是又没有被转义的时候,就会造成解析错误的问题。

  • 怎么防护SQL注入?

参数化查询的方法解决。

4)方法细节

  • SQL注入是什么:

当单引号或双引号被注入查询时,查询会中断并抛出错误。以下是在查询中放置引号的示例。

  1. SELECT * FROM users WHERE user_name='USER_INPUT'

当单引号被注入上面的入口点时,查询解释器将提示无效语法或者报告在字符串末尾找不到配对的引号。

  1. Code:
  2. $username = "'";
  3. $query = "SELECT * FROM users WHERE username='".$username."'"
  4. Result:
  5. SELECT * FROM users WHERE username='''

在输入的位置写进单引号而返回错误可能表示来自用户的输入没有以任何方式过滤或清理,并且输入了包含对数据库具有特殊含义的字符。

  • 怎么防护SQL注入?

如果单引号被反斜杠\转义了,那么单引号类型的SQL注入也就没有效果了。

  1. $username ="' or 1=1 --";
  2. $password ="qwerty123456";
  3. // . . .
  4. $query = "SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";
  5. select * from users where username='\' or 1=1 -- ' or password='qwerty123456';

如果黑客可以控制多个点,并且这些点的值在同一个上下文中,则可以使用片段化的Payload来绕过黑名单和字符限制。

  1. username: \
  2. password: or 1 #
  3. $query = select * from users where username='".$username."' and password='".$password."'";
  4. select * from users where username='\' or password=' or 1 #';

反斜杠中和了单引号。因此username列的值将以password=之后的单引号结束。这样做将从命令中删除所需的密码字段。由于【or 1】命令,条件将始终返回“true”。#(hash)将忽略函数的其余部分,从而能够绕过登录控件和登录表单。

htmlentities()函数防护: 设置ENT_QUOTES标志,HTML编码会将单引号,双引号以及tag打开和关闭转换为其对应的HTML实体。例如,一个双引号将被编码为“ &QUOT ;”。

但这种方法容易因为宽字符编码的处理方式绕过,因此并不可靠。参见:addslashes()与mysql_real_escape_string()

http://shiflett.org/blog/2006/addslashes-versus-mysql-real-escape-string

参数化查询(Prepared Statement):参数化查询将SQL查询的结构与其值分开。

  • PHP:
  1. $stmt = $dbh->prepare("UPDATE users SET email=:new_email WHERE id=:user_id");
  2. $stmt->bindParam(':new_email', $email);
  3. $stmt->bindParam(':user_id', $id);
  • .NET应用程序
  1. string sql = "SELECT * FROM Customers WHERE CustomerId = @CustomerId";
  2. SqlCommand command = new SqlCommand(sql);
  3. command.Parameters.Add(new SqlParameter("@CustomerId", System.Data.SqlDbType.Int));
  4. command.Parameters["@CustomerId"].Value = 1;

5)总结

参数化查询会比使用其他方法的防止SQL注入的方法靠谱,但仍然有人使用黑名单的方式来防止SQL注入漏洞,我们每天都会遇到新的信息安全策略试图绕过这些黑名单。使用参数化查询(Prepared Statement)可以引导系统不把用户控制的参数作为查询结构的一部分直接执行。

Tip

【逆向调试】OD调试脚本

1)场景

调试脚本类病毒

2)问题难点

混淆加密后,直接分析有难度。

3)解决思路

定位关键行为API,联网、创建进程类的再通过栈传参查找。

4)方法细节

  1. - VS调试
  2. wscript.exe /x XXX.js
  3. - OD调试
  4. 快捷方式运行 wscript.exe XXX.js
  5. E查看模块,找kernel32.dll createfile,ws2_32.dll getaddrinfo 设定条件断点,不暂停程序,记录程序参数。
  6. M查看内存状态
  7. L查看日志
  8. - apateDNS
  9. 记录网络访问

5)总结

1、找到关键行为

2、推断关键行为的API

3、条件断点记录日志

4、查看有没有特征库之外的域名

Share

【业务】极客时间-左耳听风-开篇词1

1)场景

  • 怎么知道自己应该学什么
  • 对待新技术如何思考
  • 做一个怎样的人

2)问题难点

  • 程序员应该知道的知识
  • 对技术的看法,保持热情的方法
  • 什么是Leader

3)解决思路

  • 算法、数据结构、代码整洁、Linux环境编程
  • 保持对技术追求的热情,懂得与他人交互
  • 认识到做一个好的 Leader 真的不容易,你需要比大家强很多,你需要比大家付出更多;你需要容天下难容之事,你还需要保持热情和朝气;你需要带领团队守护理想,你还需要直面困难迎刃而上……

4)方法细节

极客时间-左耳听风-开篇词1

https://www.cnblogs.com/17bdw/p/10183216.html

5)总结

  • 程序员
  1. 懂得读书:算法、数据结构、代码整洁、Unix编程
  2. 应有的知识:代码复查、编程语言和代码质量对比、不但要做出来还要写出来和说出来与他人交互
  3. Leader:迎难而上、赢得信任、开放的心态

【ARTS】01_07_左耳听风-20181224~1230的更多相关文章

  1. 【ARTS】01_21_左耳听风-201900401~201900407

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  2. 【ARTS】01_20_左耳听风-20190325~20190331

    zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...

  3. 【ARTS】01_19_左耳听风-20190318~20190324

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  4. 【ARTS】01_18_左耳听风-20190311~20190317

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  5. 【ARTS】01_17_左耳听风-20190304~20190310

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. 【ARTS】01_16_左耳听风-20190225~20190303

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. 【ARTS】01_14_左耳听风-20190211~20190217

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  8. 【ARTS】01_10_左耳听风-20190114~20190120

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  9. 【ARTS】01_09_左耳听风-20190107~20190113

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

随机推荐

  1. 每日scrum(5)

    进入冲刺第五天,软件的界面设计成为主打,收集学校的很多美图是我们组的任务: 问题在于软件已很难有很大的改进,大方向也都是变不了的 任务看板: 燃尽图:

  2. 派生类&简单工厂模式

    派生类&简单工厂模式 git链接: Operation3.1.1 题目描述的代码部分的解释 首先是声明一个Rand类作为父类,然后两个子类RandNumber类和RandOperation类, ...

  3. Feature List

    我组最终决定所做的软件工程项目是Bing词典(UWP)的背单词模块,下面是初步定下的Feature List. 按用户场景变化顺序列举(假设是新用户): 1.用户可通过点击“背单词”标识或按钮进入背单 ...

  4. 数据平面可编程与SDN关系理解,以及数据平面可编程的理解

    数据平面可编程与SDN关系 狭义 广义 数据平面可编程的理解 狭义 广义

  5. MySQL查询优化:LIMIT 1避免全表扫描

    在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率. 例如下面的用户表(主键id,邮箱,密码): create table t_user(id int primar ...

  6. 在delphi中我用DBGrid选择多条记录,如何一次把选择的多条记录删掉

    procedure TForm1.btnDoSumClick(Sender: TObject);var  i: Integer;begin  if DBGrid1.SelectedRows.Count ...

  7. bzoj5301[CQOI2018]异或序列

    题意 已知一个长度为 n 的整数数列 a[1],a[2],-,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所有的 x,y (l ...

  8. MT【183】借力打力

    (2011安徽省赛)设$f(x)=ax^3+bx+c(a,b,c\in R)$,当$0\le x \le1$时,$0\le f(x)\le1$,求$b$的可能的最大值. 分析:$f(0)=c,f(1) ...

  9. 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)

    题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...

  10. 【BZOJ1296】[SCOI2009]粉刷匠(动态规划)

    [BZOJ1296][SCOI2009]粉刷匠(动态规划) 题面 BZOJ 洛谷 题解 一眼题吧. 对于每个串做一次\(dp\),求出这个串刷若干次次能够达到的最大值,然后背包合并所有的结果即可. # ...