积极考研自救day1之leectode24点问题+今日份学习总结

今天开始不能丧气的听天由命,把那个诅咒我考不上的学长删了 ,努力把自己那不高的考研分数发挥到极致,主动联系导师要论文,LeetCode主要是搜索和字符串链表之类的,每天日更博客五道编程题从中选一个最精彩的+专业课学习总结+老师论文学习+各种项目突击。
去特么工作,特么欺负死我了,让我去公司现场一个sql注入,一个XSS,一个文件上传,一个文件包含,一个OS注入,我就磕磕巴巴的XSS还大概弄出来了,剩下的干坐着2个小时。。。。。
不沉迷写小说了,积极自救挣扎。。。。
一上午都在上机,回来又哭了一会儿,跟老师和小伙伴交涉了一下,所以今天的内容有些短小,如果你对哪块的细节感兴趣可以私信我讨论哦~

今日编程的精彩

在这里插入图片描述题目链接

这题应该是一个小伙伴的夏令营上机题,貌似是清*大学
第一反应是暴力全都穷举一遍,数字顺序还好说,但是符号组合方式多到指数爆炸,没有好想法了,决定看answer了
看到答案之后,我觉得我差劲的原因来了,只想着字符串一样的穷举,但是它是个算数呀,每次都是要2个,然后4*3 = 12种,然后剩下三个数,再这样取两个,3*2 = 6,2*1 = 2每次可以有加减乘除4种运算之一,所以总共是12种取法*4种运算*6种取法*4种运算*2*4 = 9216种可能

官方给的思路也比较清晰:把这四个数放到一个列表中,每次取两个并选一个操作,把计算结果放入列表中代替这个数,这样数字就少了一个,直到数字只剩一个看是否是24

官方给的答案里面有些不太常用的语法来处理浮点数的问题,还挺好的,先学习一下,一下来自官方,今天心情不太好,其实这题冷静下来能分析出些思路的:
今天哭太久了,明天重做一下

class Solution {
public:
    static constexpr int TARGET = 24;//这里的constexpr就是升级的const编译器有优化第一次见到
    static constexpr double EPSILON = 1e-6;//浮点数不能用==比较,所以是用相减小于一个数来算的,每次我都想偷懒
    static constexpr int ADD = 0, MULTIPLY = 1, SUBTRACT = 2, DIVIDE = 3;

    bool judgePoint24(vector<int> &nums) {
        vector<double> l;
        for (const int &num : nums) {
            l.emplace_back(static_cast<double>(num));//这里的强制类型转换的方法也是第一次见到
        }
        return solve(l);
    }

    bool solve(vector<double> &l) {
        if (l.size() == 0) {
            return false;
        }
        if (l.size() == 1) {
            return fabs(l[0] - TARGET) < EPSILON;
        }
        int size = l.size();
        for (int i = 0; i < size; i++) {//枚举两个数,因为注意/和-是有顺序的,+和*是没有顺序
            for (int j = 0; j < size; j++) {
                if (i != j) {
                    vector<double> list2 = vector<double>();//开始做挑选工作
                    for (int k = 0; k < size; k++) {//把没选的先放进去
                        if (k != i && k != j) {
                            list2.emplace_back(l[k]);
                        }
                    }
                    for (int k = 0; k < 4; k++) {//开始枚举
                        if (k < 2 && i > j) {//如果是+和*没有顺序就不重新算一下了,而且i > j前面算过了
                            continue;
                        }
                        if (k == ADD) {
                            list2.emplace_back(l[i] + l[j]);
                        } else if (k == MULTIPLY) {
                            list2.emplace_back(l[i] * l[j]);
                        } else if (k == SUBTRACT) {
                            list2.emplace_back(l[i] - l[j]);
                        } else if (k == DIVIDE) {
                            if (fabs(l[j]) < EPSILON) {
                                continue;
                            }
                            list2.emplace_back(l[i] / l[j]);
                        }
                        if (solve(list2)) {
                            return true;
                        }
                        list2.pop_back();
                    }
                }
            }
        }
        return false;
    }
};
//有一种很风骚的方法计算,但上机那种不用炫技,C++的lamda表达式
unordered_map<string, function<int (int, int) > > map = {
            { "+" , [] (int a, int b) { return a + b; } },
            { "-" , [] (int a, int b) { return a - b; } },
            { "*" , [] (int a, int b) { return a * b; } },
            { "/" , [] (int a, int b) { return a / b; } }
        };
map[s](op2, op1);

做了四道北理的上机真题吧,有的描述不太清楚,但是我比较喜欢的方式分享一下

//用来处理,用一些分割符的,java的split多好啊
stringstream ss(path);
string tmp;
while(getline(ss,tmp,'/')) {
       //这个会直到末尾遇到eof,tmp是坚决不读'/'的如果一上来就'/'就读'';
 }
 //结构体,类,自定义排序,这里其实是pair,不过差不多啦
 sort(pr.begin(), pr.end(),
             [](const auto& L, const auto& R) {
                 if(L.first != R.first)
                    return L.second > R.second;
                 else{
                     return L.first > L.first;
                 }
             });

专业课部分

信息学部分:

  • 虽然不知道有没有用吧,但也学着,发现一个很好的靶机平台vulnhub,直接上vmware是可以的,跟着博客做完了一个ctf0还学习了一下中国蚁剑,很好用比菜刀高级多了,就是安装的时候它有个Loader和核心源码,初始化的时候,把那个文件夹指向那个核心源码就好了。
  • 复习了一下,文件上传的图片木马如何连蚁剑,今天那题,bp抓包改文件名这种菜鸡方法是不可以的,这种情况只能文件包含配着文件上传一起用,但是今天那题特骚,提示中文件名还特么加了随机数然后算了个哈希,我…而且它上传的路径我找不到,学习到可以用bp来爆破,但其实还是凭着经验找一点一点式路径,再学学看看有木有好的方法吧。

计算机网络部分:

  • 今天看了小林的那个HTTP3,推荐一下小林coding的,他的公众号真不错,今天是QUIC,谷歌提出的,感觉挺有前途的,现在5G自媒体,大流量大家还是对快要求很高,从林哥那里总结一下QUIC协议的特点吧,无队头阻塞多个Stream之间没有影响,一个堵塞了,不影响其他的;建立连接速度很快,1个RTT就同时完成建立链接与TLS秘钥协商;连接迁移,这个比较NB,不是四元组来绑定,而是连接ID来记录通信,网络变化后,IP变了,通过ID可以来标识自己,只要上下文还在,那么久可以连上,消除重连的成本

密码学部分:

  • 说起密码学吧,每次学一上午的密码学我就很难受,数学问道太浓郁了,总是走神写小说,尤其是对密码算法的推导,后面我决定还是实现算法,直接背吧。就复习一下,初试没写出来,现在挂在墙上的RSA小可爱吧

秘钥生成部分:
选择不相等的p,q; n = p * q; φ \varphi φ(n) = (p - 1)(q - 1);随机选择e,1 < e < φ \varphi φ(n)且e与 φ \varphi φ(n)互素
公钥为(n, e),利用公钥来算一个私钥,ed - k φ \varphi φ(n) = 1这个二元一次方程组中选一组(d, k),则(n, d)为私钥

操作系统部分:

  • 面试突击那些总结一下:
    • 常用的Linux命令行小工具:不要发杵vim,这个一定要会
      • 进程操作:查看当前哪些进程在rung的ps, top,问了N遍
      • 文件操作:mv 老名字,新名字(mv原来可以改名用;
      • 网络部分:ifconfig看IP,netstat看开放的端口

小项目部分

  • 把原来那个Java的购买项目的用户登录部分,加了下放sql注入,更新了一下github,好吧就是把Statement变成PreparedStatement,Java对单引号进行转译而已(^_−)☆
  • 虽然不知道算不算项目,但是我开始手动实现密码学算法,利用C++,今天就那个小RSA吧,明天上代码,反正向github上放一放,在简历里凑个数,其实这个很难哩

dream tutor的论文

老师很热情的给了,能量分析攻击,是我挺喜欢的领域的,第一次看老师展示觉得很神奇就居然不用数学就可以破译密码有点cool,论文全是英文加实验过程,不过挺好的,至少不是毕设老师那样让自己找,只看了一点点,明天大量,今天先来个引子
能量分析攻击的主要思想是:通过分析密码设备的能量消耗获得其秘钥。本质上,这种攻击利用了两类能量消耗的依赖性:数据依赖性和操作依赖性

今天是一个好的开始,抛弃那些,开始认真的写博客分享学习,就认真的试一把复试,老师那么好,真的他怎么那么好,好像当他的学生,努力加油吧,用复试来弥补一下初试,不要丧了,加油宝贝!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值