自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 资源 (1)
  • 收藏
  • 关注

原创 全志F1C100S RT-Thread(RTOS)视频教程

作为搞软件开发的,弄这种硬件底层的东西还是挺头疼的,因为我搞的东西要求实时性非常高,又要低成本(要让不吃草的马儿跑),FPGA虽然能满足需求,但实在是贵,开发成本就更高,成本控制上就被K掉。arduino那些简单便宜,性能却又完全达不到要求后来找到个做硬件的朋友,推荐了这个全志F1C100S,据说芯片就10多块钱,我tb上买的成品板,也就40多,批发或者量产的话,成本肯定还能更低。这个芯片居然能跑400-900 mhz,32m ram,温度还低,然后板载了个nor flash,实在是非常非常可怕,基本满足了

2020-01-15 11:21:19 9856 12

原创 windows c++ CreateFile x86程序访问system32目录下文件报错 GetLastError 2 文件不存在

结论:32位程序与文件重定向器发生了冲突。

2023-08-03 14:08:03 270

原创 linux 高版本gcc兼容低版本系统的方法

3、使用musl-gcc的静态编译二进制,这个只要代码能编译出来,就基本能拿到各个系统下去运行,但源码中应该不能包含系统调用,缺少 之类的内核相关的头文件,猜测需要把buildroot放在一起编译才行。我们不能在低版本的系统上去运行只有高版本实现的功能,只能运行两者有相同签名实现且结果是相同的,才能做版本替换,否则是需要自行去实现功能的,无论是静态还是这些方法,都不能去绕开这个最基本的问题。以下是两种方案是合理、可行的。

2023-07-11 14:55:12 3378

原创 c#/c++ 通过系统api监视文件变化的问题

所以在dotnet上,实际上并没有使用这种方式,而是通过ReadDirectoryChangesW 去实现的,这种基于buffer的,理论不溢出,就不会出现丢失的情况。总结一下,使用fsw千万需要小心,在win和linux上的表现是不同的,win上可以放心用,linux上可能会漏文件,需要在自己场景下特定的时间点进行检测。所以在linux下,我的那种场景,刚好就触发了这个问题,这种是基于inotify的缺陷,因为这玩意也没buffer,我猜测与上面c++的demo出现的问题类似。

2023-07-04 14:34:52 1179

原创 c#调用c++ dll,Release版本内存访问错误

起初还以为是yara c代码上的问题,但看了下它源码,发现这一段调用,没有明显的逻辑或者内存上的错误,那么就往.net上排查。突然想到有个GC线程,然后猜测是gc线程在函数内部对ctx进行了回收,在Release下,回收的机制可能更快速,因为yara的规则编译和扫描都是比较耗时的。最近遇到个比较经典的案例,在c#中调用yara进行文件检测,yara是c编写的一个非常强大库,github有个大佬用c#对其进行了封装,使其能在跨平台下,只需编译yara的so或dll就能直接跑。

2023-06-30 09:38:06 644

转载 C#,字符串最大公共子序列(LCS,Longest Common Subsequences)

如果俩个字母不相同,就选择左方或者上方较大的填入。如果俩个字母相同,选择左上方的数字加1填入。

2023-05-03 15:25:10 104

原创 linux c++ 双向交互管道及冲突解决

那么如果目标进程是交互式的,显然不能满足要求,那么就需要再往底层走一点,自己创建双向管道,去做交互。通过ida反汇编调试,发现这地方会去fdopen(0,"a"),如果在外部重定向管道,这地方就没法过去。这引出一个非常棘手的问题,仔细阅读dup2的说明可以发现,dup2在以指定的文件描述符进行重定向后,会关闭原本的文件描述符。换个思路,那么如果我去fdopen一个指定fd,就可以通过这句,首先修改目标进程变量dword_8082A28的值,确保在此处为7。

2022-10-31 16:44:12 573 1

原创 .net core com对象使用分析

NET程序里面使用,比如以前在2003时代,想要写自己的基于IE的浏览器,就得手动加入与IWebBrowser2接口相关的DLL,这种方式是大家最常用的,也是最傻瓜化的,因此也没什么可解释的。正如前面所说的,只有实现了IDispatch,Dual类型的接口才支持被导出,而且面对不同版本的COM或许会生成不一样的导出DLL,比如说A机器上写代码时导入了一个Jet2.6版本的包装DLL,代码编译了拿到B机器上去运行,但是B机器上的Jet版本是2.8的,就可能会出现运行时错误。非标准的com,是不完全支持的。

2022-10-10 14:51:37 836

原创 .net core 跨平台UI框架 Avalonia

虽然可以在场景下,按需加载,但avalonia设计有个很头痛的问题是,我看他底层用的是自己的渲染器在web上渲染,并非是去转换为html/css代码,也就导致每个窗口都需要他的引擎加载,从而在设计上,很难去进行多窗口的跳转。由于设计的问题,如果要支持web的话,是不能多窗口的,意味着web只能在一个窗口上加载,这确实是个很头痛的问题,和正常的web设计思路很不一样。没想到,梦想还真的实现了,还是开源的,还跨了所有平台,这就是Avalonia,似乎挺新的,大致看了下,理念和设计都很前卫。......

2022-07-19 09:22:50 3288

原创 文件真实类型识别 - linux c file

在windows下,文件类型一般以后缀名的形式体现,但后缀名却是可以随意更改的。甚至在linux下,本身是没有后缀名的概念的。在很多应用中,需要判断文件的真实类型,例如web上传文件等在网上有很多都是简单识别下文件特征,例如jpg、png、mp4这些常见的格式,那么有没有很全面的文件类型识别的方法呢?当然是有的当时调研了很多库,发现linux下开源的file所覆盖的范围当属第一,纯c代码,通过阅读源码可以知道,既可以通过magic文件拓展识别特征,还能对文本判断编码、是CR、LF还是CRLF之类的,可谓是面

2022-06-28 10:18:54 836

原创 关于Visual Studio 不支持x64 内联汇编分析

记录一下今天的大坑,实在是有必要记录一下调程序发现参数在函数传递时,出现了异常的值,已经确认不是指针破坏的问题。用汇编看了下,发现汇编寄存器地址都取错了,在release开启o2优化时出现,关掉又正常,实在是百思不得其解。对于内联汇编,其实很多人简单的就能想到__asm这样嵌入进去的代码。但后来我仔细找了下,发现内含的函数,与__asm 所体现的形式完全一致。通过#pragma intrinsic(myfunc) 所定义,具体可以参考#pragma的详细用法_寂寂寂寂寂蝶丶的博客-CSDN博客#pragma

2022-06-09 16:27:05 1449

原创 linux c++ epoll 网络框架

ps该框架不适用于B/S,个人认为.netcore/nginx这些已经做得比较完美了,整个框架以及以后的规划都会只针对于C/S端使用。服务端返回此处通信的PUB_KEY,客户端生成AES秘钥,使用此处的PUB_KEY将密钥通过ECC加密后发送至服务端。5.基于应用层头协议,支持单通道消息穿插,无需切片,毫秒级响应(例如单通道传输文件时收发文字消息的场景)3.良好的负载均衡设计,使得多用户之间的资源占用更为公平,减少长时间无响应的发生概率。减少由多通道而带来的额外开销,使用管理更加简单、轻便。......

2019-12-19 10:39:05 472

原创 C# WPF 数据绑定同步

WPF里有几个关于后台数据绑定的核心对象,但有些时候其使用方式却容易让人迷惑,甚至混淆。现在就来总结梳理一下,DataContext、Itemsource、Command、Binding、INotifyPropertyChanged、ObservableCollection。首先从XAML上最简单的前台单向Binding开始:<TextBlock Grid.Column="0" Te...

2019-03-12 20:04:01 1878

原创 C++ CMake常用总结

这次在公司强制熟悉了一波CMake,以前自己就算是宁肯写makefile也不想去引入cmake,总觉得越原始的东西可控性越高,强迫症晚期了,哈哈。没想到用了之后才觉得,这东西还真**方便,不用真SB了。Cmake在解决跨平台编译配置问题基本是首选(虽然还没试过),仅仅是看了别人写的CMakeList.txt就这样觉得,几句就可以生成不同编译器,不同操作系统,X86和X64的编译配置文件。解决头文件...

2019-02-23 23:07:08 528

原创 C++ ORM Matador

对于关系型数据库,sql无疑是让人头疼的地方,个人对写这种重复CRUD的代码简直觉得是恶心透底,要是表再一多,瞬间爆炸。对于c++,我以往本身还是很排斥ORM的,毕竟那是java和c#喜欢用的东西,感觉没有什么比较顺眼的开源框架,直到这次在巨大压力下尝试matador这个框架,其本身简洁的语法以及极低依赖深深吸引了我,没想到在c++里orm也可以实现得如此优雅。支持采用db first 和 c...

2019-02-20 18:26:06 1788 2

原创 _stdcall 与 _cdecl

以前用过WINAPI,后来做dll也总是习惯于_stdcall,虽然知道C里面用_cdecl的挺多的,还以为只是种习惯声明,直到最近用C#导入C++的dll才发现这两种在原理上实质还是有一定的差别的,又扫盲了。。。 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。 汇编:pushcalla1    proc  ...

2019-01-22 17:57:42 1310

原创 c++ 乘积最大

今天抽空活动脑子做题,虽然一次过了,一看耗时是别人10倍,内存消耗也高。。最后发现居然自己傻逼了,把DP的题用DFS解了。。。不得不说方法和思路是至关重要的。。。 这个题有个很关键的地方,这个性质决定了这题应该是用DP求解。就是 X被划分成X1 X2 ,X1*X2<X,根据此性质,可以知道第0次划分值是最大的,第1次划分最大值依次缩小。才能对最大值依次往下进行划分 我这都把代...

2018-12-06 13:14:28 2472

原创 c++ 局域网远程开机(wol、魔术包)

实现原理很简单,就是udp发个包,共102字节。网卡应该是基于链路层处理的,并不用指定特定的IP和端口,随意设置端口全网广播即可。最后再加个bat脚本 ./WOL.exe xx:xx:xx:xx:xx:xx,放在365*24小时开机的mini小主机上,远程登录小主机,点下bat就可以将大PC开机(PS:主要是因为我大主机太耗电了,开24小时有点受不了),进行控制了~但在win10下遇到个特别蛋...

2018-11-24 15:33:50 11627

原创 c++ 旅行家的预算

空闲时间仍然做些题活动下脑筋,偶遇这题,感觉挺有意思的,难度不大,但真的实实在在的体现了贪心算法的核心价值观hhhh.......总的来说,就是在当下不断循环去寻找最近的最好的解,有好的解,就直接跳过去,没有的话就认为当下是最好的,然后往下走一步算一步~ 题目链接 #include<iostream>#include<cmath>#include&lt...

2018-11-15 14:15:58 1519

原创 c# 原子读写锁

读写锁一般用于高性能应用场景,.net 好像有内置读写锁,还没去看具体实现。我个人是以原子锁方式实现,主要用于并发读,独占写,并以写优先。关于优先的设计,应该有几种策略,就是读优先还是写优先还是均衡。我以写优先的原因在于,如果此时存在有待写入的数据,那么认为之前的数据已经过时,获取之前的数据将没有任何意义。不过缺陷在于高并发读频繁写的场景下,可能会导致大量读取等待,一直写。个人认为不同的策略各具优...

2018-11-03 00:05:06 3060

原创 C++ 拼数

看到个挺有意思的题,虽然使用stl非常简单,但要完全不使用stl的话,还是有点头疼的,关键在于如何在不拼接的情况下,计算出最终要的结果,我是从这个点出发的,因为我认为一旦一个一个去拼接比较,浪费空间、浪费时间,还显得很low。算法关键点在于A和B比较,A与B长度不一致的情况下,要以长的为基准,短的里面取模。可以这样比较的原因,在于是短的在前,长的在后,而前面通过比较已知A、B的相同部分,这个思...

2018-10-24 13:57:18 1550

原创 c++ qqcbc+tea qq数据包加密解密

    qq.h#define uchar unsigned charclass qq{ const int delta = 0x9E3779B9;//黄金数 int c;//轮数 uchar* buf; void EncryptProc(); void DecryptProc();public: uchar* enData=0; uchar*...

2018-10-09 16:27:00 1754

原创 c# win32api 获取文件和文件夹图标

 1、添加引用System.Drawing 2、拿到Icon之后要先toBitmap然后再save到memorystream中,不然ms写入到BitmapImage中是16色的using System;using System.Collections.Generic;using System.Drawing;using System.Linq;using System.Runti...

2018-09-17 22:09:33 1705

原创 c# wpf控件被覆盖问题

这算是个碰上的入门级的问题,但我当时选人的时候拿去做为最最最简单测试题,居然有些人连思路都没有,真的是让我服气。首先,说一下场景,相信都看过QQ或者是TIM登录界面,输入这个地方是两个控件,自定义的combox和textbox,而且很清晰可以看见,每个控件的border都是1px,鼠标放在任意一个上面,border都会变色。那么问题来了,既然这两个控件的border都是完整会变色的,那么两个控件的...

2018-06-19 12:47:25 5721

原创 EXE内嵌问题

好久没写过博客了,想写的东西实在太多太多,项目又多得让人头皮发麻。现在挤出时间来写一些吧,怕以后又忘了该写什么了。最近接到个需求,是关于EXE内嵌的,其实这能说的也不太多,毕竟就4个windows api,原理也很简单,就是把一个窗体设为另一个窗体的child,设置窗体样式,然后把要嵌入的窗体移动就去就好了。但实际中,让人捉摸不透的地方确实有不少,我看网上其他人写的,原理大多不知道,哪些地方会出问...

2018-06-19 12:27:54 638 1

原创 C++ 归并排序,千万级以上数据的排序

众所周知,著名的8大排序算法相信大家都看过,但我唯独对归并排序是情有独钟。因为这个算法,是一个可以轻松而愉快的进行并行排序的东西,而且归并排序是稳定的。当数量达到一定级别的时候,无论再优秀的算法,都会消耗一定的时间。所以,这个时候,就必须利用多线程去加速计算,但多线程又是一个极其难以控制的东西,因为必须将主体分为绝对互不影响的N部分就分别计算后统一,恰恰归并排序就有这个性质,并且还是均分的。归并的

2017-12-11 18:08:36 4141 1

原创 Mysql 自动备份

正常来说服务器被黑掉或者崩掉虽然是极小概率事件,但也不是完全不可能发生的。甚至看到过有人不注意直接用root在根目录下rm -fr,这些风险是随时有可能发生的。然而线上的项目那是100%不允许出现这种情况的,所以说备份是架构里面很重要的一部分。我个人认为备份分为两种,一种是实时备份,一种是定时备份。这2种备份应用于不同的场景,比如我数据不太重要,那就简单做个定时备份就行,丢失数据的损失几乎没有的情

2017-12-10 11:11:26 238

原创 C++ P2P通信

P2P通信是几年前我就看过的东西,但那时候主要用TCP,还有NAT的类型会对其有限制,所以觉得并不太通用,而且,打造这种环境也实在太麻烦,也就没有去写代码实现下。其实我心里一直觉得P2P是个很神奇有用的东西,现在补坑,还是去把P2P给重新弄了一遍。理清思路之后,发现P2P其实并不像以前想象的那么复杂首先,NAT有几种分类,这个是必须需要知道的。我是用联通4G 和 校园网宽带作为andr

2017-11-13 21:25:05 4295 2

原创 C++ Tea

Tea算法属于分组加密、对称加密的一种,对于对称加密算法,解密过程就是一种对加密过程的逆运算,根本不需要什么数学证明。简单来说就是我有两个数 a,b ,a+=k1b,b+=k2a,a+=k3b,b+=k4a.....a+=knb,b+=kna,最后存储的就是最后的a,b的值,那么我可以用a去还原b,还原后的b又可以去还原上一个a,以此类推,对称加密和把两根绳子螺旋捆在一起,然后反向旋转分开的过程。...

2017-11-12 12:12:34 1123

原创 C++ MD5

MD5是一种摘要算法,通过压缩+加密+hash的算法是绝对不可逆的。网上有很多人都写了,我也参考了MD5的基本规则写的。这个算法从数学角度上来说,主要是需要证明唯一性,但凭我等的能力想要做这种证明是不太现实的。因为我实在没办法去证明通过一系列的运算,累加a,b,c,d还能够有唯一性,因为就逆向去看加法,那是有无数解的,MD5也只能说在概率上是不会重复的吧。所以说那个幻数,还有里面的那些数据,是不能

2017-11-11 20:55:39 3753 3

原创 Android RecycleView 分类和折叠显示

在使用recycleview的时候,外层最好是不要有scrollview,或者说是不能,不然会发生冲突。仔细想想recycleview的wrap_content 并不代表着根据内容自适应高度,它的高度应和屏幕高度保持一致,然后才能去重复利用view,所以你把recycleview撑开了的话,再使用scrollview去滚动,就失去了本身的意义。所以,实现一定是用1个recycleview去包裹住所

2017-11-07 10:37:54 5226

原创 .NetCore WebSocket

我喜欢.NET CORE 这个东西,其实不仅仅源于它性能很高,可以跨平台,还因为它的设计模式确实令人着迷。以前没.NET CORE 的时候,.NET用websocket必须跑在windows server 2012上,但我一般不会这么干,都把websocket架在nodejs的服务器上。这么分出来,麻烦肯定是麻烦的,而且js这东西,写复杂和几年后再看都是头疼的问题。那么,如果.NET CORE是以

2017-11-07 09:38:04 3872

原创 Android 7.0 Service保活总结

最近开发了个内部即时通信的app,可以说是真的蛋疼了,我几乎把整个保活的文章全部看了一遍,可以说android界真的是特别的鱼龙混杂。很多文章都写得很片面,容易形成很大的误导。我先说一个最近研究得出来的结论,在7.0或之后的版本,包括三星和国内的这些原生rom,如果不通过用户或厂家设置,至少service是绝对没有任何办法保活的,绝对,除非你还能找到未知的漏洞。虽然我也很头疼,但我真的很赞同谷歌这样的做法,不然天天收推送通知真的是恶心得不行,IOS也得手动去关。现在android可以说是将一切统统杀掉,然后

2017-11-06 15:36:41 17720 6

原创 C++ RSA

首先要说证明不全是我自己证明的,有些是从各个地方整理出来的,证明包含了每个细节,可以说是最详细的一套从头到脚的证明,有助于对RSA算法的绝对理解,主要是关于a,b互质的不定方程用辗转相除求解,其中还有一些相关的定理证明,还有欧拉定理用于RSA公式的证明。代码是自己写的非高精RSA实现,高精看着太难受了,写着也难受,就暂时先放掉,也就是说任何一个地方都不能超过long long 的取值范围

2017-10-25 11:22:45 964

原创 VC++ 拖拽和Hover效果

效果就是gif所展示的,我做这个是想模仿游戏里面拖动物品到方格上部署的这么一个效果,用纯windowsapi实现起来还真的有那么一丢丢困难。主要涉及以下这几个点:1、双缓冲绘图:缓冲绘图十分重要,可以屏蔽掉InvalidateRect清除背景,如果直接先清除再重画,那么一定会看到屏闪。所以一般不对hdc进行直接操作,所有操作都是对内存DC操作,比如移动,我先让原位置的物体用背景替代,然而在

2017-10-22 13:18:28 680

原创 nginx 反向代理配置

websocket 支持,1.3版本以上,加proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;即可ddns反向代理:由于ddns对应的ip会不定时变化,但如果直接在upstream里面写域名的话,不会再动态解析。需做如下设置首先指定r...

2017-10-14 11:46:32 591 4

原创 .NetCore Enyim.Caching Memcached源码分析

由于asp.net core中的session用着感觉并不顺手,所以从最开始就重新写了套缓存框架,底层可以用本地缓存、redis、memcached,当然作为缓存,我还是优先选择了memcached。本身用.net core的人就很少,坑的地方实在太多,像这种比较出名的框架都可能有bug,还得把源码弄下来看,文献就更少了。我用的是EnyimMemcachedCore,这是从.net上移植过来的,感

2017-10-13 15:16:36 1888

原创 C++ 高精算法

高精算法这东西听起来还是有点高大上,说白了就是模拟小学学的竖式加减乘除,原理非常的简单,用一个int数组存储一个数,int数组中每一个表示这个数的每一位,数组中的顺序是从低位到高位存储,这样在运算的时候进退位很方便,并且用数组中第一个记录这个数的长度,这样就避免判断高位0是否是有效0。还有就是处理运算后进退位造成的位数长度变化,这个需要点技巧,我是最开始让结果位长度等于原位长度,然后在进位到最高位

2017-10-04 20:38:19 2963

原创 VSCode C++编译调试 Mac

1.mac下用c++-clang智能提示,mac下我这是安装过clang的,应该是mac自带的吧,在shell中输入whereis clang看下路径。在vscode中按home+shift+p 输入open user settings 配置clang:{"clang.executable": "/usr/bin/clang",}重启后就有智能提示了,和

2017-10-03 15:34:50 6663 1

原创 C++ 多进程DP

题目描述设有N*N的方格图(N人数字0。如下图所示(见样例):A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 0 0 0 0 0 14 0 0

2017-09-26 19:24:47 576

C# WPF DataGrid行拖拽顺序交换

C# WPF DataGrid行拖拽顺序交换,通过按下rowheader,移动到目标行rowheader松开,实现列表顺序交换

2018-12-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除