月度归档:2018年02月

解决Shadowsocks-4.0.8无法加载libcrypto-1_1.dll

升级win下的纸飞机版本到4.08后,飞机变得相当不稳定,查log发现是找不到libcrypto-1_1.dll链接库的问题,再看看项目release的介绍是添加了OpenSSL 1.1.0g实现硬件加速

[2018-02-21 08:23:13] System.DllNotFoundException: 无法加载 DLL“libcrypto-1_1.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
在 Shadowsocks.Encryption.OpenSSL.EVP_get_cipherbyname(Byte[] name)
在 Shadowsocks.Encryption.OpenSSL.GetCipherInfo(String cipherName)
在 Shadowsocks.Encryption.Stream.StreamOpenSSLEncryptor.initCipher(Byte[] iv, Boolean isEncrypt)
在 Shadowsocks.Encryption.Stream.StreamEncryptor.Encrypt(Byte[] buf, Int32 length, Byte[] outbuf, Int32& outlength)
在 Shadowsocks.Controller.TCPHandler.SendToServer(Int32 length, AsyncSession session)
在 Shadowsocks.Controller.TCPHandler.StartPipe(AsyncSession session)

根据issue1679提供的方法,4.08之前的版本都没有实现win下的AES硬件加速,这次通过libcrypto-1_1.dll实现了硬解,不过libcrypto-1_1.dll依赖vc库的支持,再由于纸飞机项目依旧在使用x86target,所以需要安装 Microsoft Visual C++ 2015 Redistributable Update 3 所提供的 vc_redist.x86.exe

附上纸飞机运行的依赖库链接
- Microsoft Visual C++ 2015 Redistributable Update 3
- Microsoft .NET Framework 4.6.2 (Offline Installer)

感谢纸飞机项目组成员的辛勤维护!

Leetcode 232. Implement Queue using Stacks(栈实现队列)

题意重述

使用栈实现队列的数据结构,实现后的队列包含的操作方法push pop peek empty,要求只能使用栈的原始数据结构以及操作方法 原题链接

解题思路

与上一题思路一样,重写push的操作方法,两个队列使push后的顺序和栈保持一致,其余操作pop ``peekempty` 基本保持不变

继续阅读

北京游玩总结

时隔12年再次来到帝都,不过帝都并不是自己所向往的大城市,这次游玩主要是会会在北京实习的同学,也借此机会来看看帝都的繁华,这次旅行除了友谊和美景的收获之外,最后也给我带来颇多感触。

继续阅读

Leetcode 455. Assign Cookies(分曲奇)

题意重述

每个孩子有他们期望得到曲奇的大小,这个值记为gi(贪婪因子),而你手中每个曲奇大小记为sj,现在你要使尽可能满足更多的孩子 原题链接

解题思路

贪婪算法的典型例题,分配遵循如下原则:
1. 如果一个孩子对所有的曲奇大小都满足,那就分给他最小的
2. 如果一个曲奇满足所有孩子的需求,那就把它分给期望得到最大的那个孩子

将gi和sj两个数组从小到大排序后一一比较,若满足则游标同时加一,若不满足则只有sj游标加一(尝试用较大的去满足)

继续阅读

Leetcode 389. Find the Difference(找不同)

题意重述

给定两个只由小写字母构成的字符串s和t,t由s打乱顺序后再位于随机位置插入一个字符,找出这个新加入的字符 原题链接

解题思路

异或运算中有自反定理

将s和t的元素两两异或,由于t是由s乱序而来,除了新插入的元素之外t和s具有相同的组成元素,按照自反定理即所剩的元素即为新加入的字符

继续阅读

Leetcode 141. Linked List Cycle(链表找环)

题意重述

链表找环 原题链接

解题思路
  1. 创建一个set集合存放节点地址,遍历链表的每一个节点,插入前与set集合中所有元素相比较,时间复杂度O(n^2)
  2. 快慢指针思想,步长分别为1和2,若两指针相遇即有环,且 相遇节点与环起点距离= 头结点与相遇节点距离(数学证明),细节上注意快指针在奇数无环链表的处理,时间复杂度为O(n)

继续阅读

Leetcode 27. Remove Element(删除元素)

题意重述

从数组中删除指定元素并返回数组长度,无需再申请内存空间,要求时间复杂度O(n),空间复杂度O(1) 原题链接

解题思路

类似快慢指针的原理,设置两个相同的游标i,j,i用于遍历整个数组,与指定元素不相等时i,j同时自增,与指定元素相等时j保持不变,每一次遍历都将i位置赋值给j位置,这样在任何时候i,j的间隔就是之前需要删除元素的总和,最后j就是删除元素后数组的长度

继续阅读