1.【快速上手mac必备】作为一名学生/程序员/新人up主,源码我都用哪些软件?
2.JFinal和Spring Boot对比
3.Github 源码阅读神器推荐
4..cs是源码什么文件
5.go-iptables功能与源码详解
【快速上手mac必备】作为一名学生/程序员/新人up主,我都用哪些软件?
作为一名大四学生、源码准程序员、源码up主,源码我将分享我在mac上使用的源码源码和dll区别实用软件。
去年9月,源码我从Windows转向mac,源码起初以为mac os封闭,源码不支持众多插件和软件。源码然而,源码经过半年使用,源码我的源码工作效率显著提升。
以下为六大分类的源码软件推荐:
一、音视频相关
1. 剪映专业版:一款全能易用的源码桌面端剪辑软件,功能丰富,适合新手。
2. Downie4:Mac OS上优秀的视频下载工具,支持多个视频网站。
3. Permute3:轻松转换mac上的媒体文件,支持几乎所有格式。
4. IINA:mac在线视频播放器,可观看视频、管理播放列表等。
5. GIPHY CAPTURE:Mac平台上GIF制作软件,方便自由调节大小录制GIF。
6. iZotope RX 9:专业音频处理软件,可实现音频降噪、去除人声等。
7. QuickTime Player:mac自带的视频播放器,可录制屏幕。
二、笔记办公
1. Typora:简洁的markdown编辑器、写作软件。
2. PicGo:图床工具,方便将本地转换成网络。
3. WPS Office:集成Word、加拿大源码屋PPT、Excel等办公套件。
4. OneNote:超赞的云笔记应用,页面灵活,支持插入附件、等。
5. MindNode:功能强大的思维导图软件,界面简洁明了。
三、软件开发
1. JetBrains全家桶:集合PyCharm、IntelliJ IDEA等编程神器。
2. VSCode:微软开发的免费源代码编辑器,支持语法高亮、代码自动补全等。
3. Postman:老牌的API开发协作平台,提供HTTP调试与模拟插件。
4. Sequel Ace:快速、易于使用的Mac数据库管理工具。
5. ZenTermLite/Termius:ssh客户端。
四、辅助工具
1. Snipaste:支持贴图的屏幕截图工具,功能强大。
2. BandZip:强大的mac解压缩软件。
3. 向日葵:免费远程控制软件。
4. PDF Squeezer:简单的拖拽PDF压缩工具。
5. ImageOptim:开源无损压缩工具。
6. 键指如飞:快速查看应用快捷键的macOS增强工具。
五、系统/软件管理
1. 腾讯柠檬:mac系统清理优化工具。
2. MacWk Updater:检测应用更新的工具。
六、云同步
1. 坚果云:提供网盘、云盘、云服务的团队协助软件。
2. OneDrive:在线存储照片和文档,可从任意设备访问。外卖侠源码官网
JFinal和Spring Boot对比
轻量级MVC框架:JFinal与Spring Boot的较量 JFinal,作为一款轻量级的MVC+ORM集成框架,它的设计理念就像简化版的SSH,旨在提供快速开发和简单易学的体验。它强调代码量少、学习简单,同时拥有Java语言的高效性和动态语言的开发效率。与之相比,Spring Boot则更像一个自动化配置神器,以Spring全家桶的集成和配置简化为核心,几行代码就能启动应用,无需繁冗的XML配置。 Spring Boot:简化Spring开发的革命 Spring Boot以其一键式创建Spring应用的能力脱颖而出,它内嵌Servlet容器,提供了Starter简化Maven配置,通过自动配置尽可能减少开发者的工作量。它的特性包括快速开发、健康检查和外部化配置,无需代码生成,直接上手。 对比:高效与易用的较量 尽管两者都旨在简化开发,但JFinal在上手速度和学习成本上更具优势,其文档简洁明了,一天内就能创建项目。而Spring Boot虽然功能强大,但文档量大且英语依赖性高,对新手而言可能稍显复杂。 JFinal的MVC架构设计精巧,使用简单,使开发者能深入理解框架,降低调试成本。而Spring Boot虽然也支持约定优于配置,但在源码阅读和问题定位上,JFinal的精简设计可能更胜一筹。 JFinal的Db + Record模式让数据库操作更灵活,无需繁琐的钱袋子起爆源码公式JavaBean映射。ActiveRecord的全面支持使得数据库开发高效快捷,相比之下,Spring Boot需额外集成SpringDataJPA或MyBatis来实现这些功能。 在插件扩展性上,JFinal的Plugin体系结构简洁易用,自定义插件过程简单,而Spring Boot虽有丰富的插件生态,但使用和维护可能较为复杂。 最后,JFinal的体积小巧且无第三方依赖,这反映了其对简洁和可扩展性的追求。而Spring Boot虽功能全面,但其自身重量级的特性可能成为初学者和小型项目的负担。 国内支持:社区力量的差异 JFinal在国内拥有稳定的用户群体,作者直接支持,遇到问题能得到及时解答,而Spring Boot虽然全球范围内应用广泛,但在国内的特定支持可能不如JFinal直接。 总的来说,JFinal凭借其精简的设计和易用性,以及对国内用户的贴心支持,在与Spring Boot的竞争中展现出了独特的优势。然而,Spring Boot的全面集成和强大的生态系统,使其在大型项目和复杂需求场景下仍然占据一席之地。开发者应根据项目需求和个人偏好,选择最适合自己的框架。Github 源码阅读神器推荐
一款高效阅读和学习源码的开源项目,source-code-hunter(doocs.github.io/source-code-hunter),为源码阅读爱好者提供便利。
借助source-code-hunter,用户能够系统化阅读各种框架的源码,包括spring全家桶、Mybatis系列、Netty、dubbo等,php免维护影视源码以及中间件、JDK源码解析。
该项目为初学者和源码学习者提供了学习心得,帮助他们建立学习模式,避免无用阅读,加速学习进程。
对于没有源码阅读经验的用户,建议先阅读学习心得,了解学习方法和思考。在日常学习中,先通过视频了解源码的大致设计和功能点,再结合source-code-hunter阅读源码,同时使用本地调试跟踪实现,提升学习效率。
source-code-hunter涵盖了常见框架的源码解析,为用户提供了丰富的学习资源,帮助用户深入理解源码逻辑,提高编程技能。
.cs是什么文件
.cs是C Sharp程序设计语言的源代码文件。它是一种微软主推的面向对象的高级编程语言,拥有同Java类似的语法和使用方式,但是主要是在微软全家桶上开发并编译的,依赖的环境也主要是微软的.net。C Sharp编写的程序,其源文件拓展名就是.cs,可以用它来编译可执行程序。其旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言。软件必须做到强大、持久,并具有较强的编程生产力。
C#是由C和C++衍生出来的一种安全的、稳定的、简单的、优雅的面向对象编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。
C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT .NET平台的应用程序,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。
C#使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,而绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。
go-iptables功能与源码详解
介绍iptables之前我们先搬出他的父亲netfilter,netfilter是基于 Linux 2.4.x或更新的内核,提供了一系列报文处理的能力(过滤+改包+连接跟踪),具体来讲可以包含以下几个功能:
其实说白了,netfilter就是操作系统实现了网络防火墙的能力(连接跟踪+过滤+改包),而iptables就是用户态操作内核中防火墙能力的命令行工具,位于用户空间。快问快答,为啥计算机系统需要内核态和用户态(狗头)。
既然netfilter是对报文进行处理,那么我们就应该先了解一下内核是如何进行收发包的,发生报文大致流程如下:
netfilter框架就是作用于网络层中,在一些关键的报文收发处理路径上,加一些hook点,可以认为是一个个检查点,有的在主机外报文进入的位置(PREROUTING ),有的在经过路由发觉要进入本机用户态处理之前(INPUT ),有的在用户态处理完成后发出的地方(OUTPUT ),有的在报文经过路由并且发觉不是本机决定转发走的位置(FOWARD ),有的在路由转发之后出口的位置(POSTROUTING ),每个检查点有不同的规则集合,这些规则会有一定的优先级顺序,如果报文达到匹配条件(五元组之类的)且优先级最高的规则(序号越小优先级越高),内核会执行规则对应的动作,比如说拒绝,放行,记录日志,丢弃。
最后总结如下图所示,里面包含了netfilter框架中,报文在网络层先后经过的一些hook点:
报文转发视角:
iptables命令行工具管理视角:
规则种类:
流入本机路径:
经过本机路径:
流出本机路径:
由上一章节我们已经知道了iptables是用户态的命令行工具,目的就是为了方便我们在各个检查点增删改查不同种类的规则,命令的格式大致如下,简单理解就是针对具体的哪些流(五元组+某些特定协议还会有更细分的匹配条件,比如说只针对tcp syn报文)进行怎样的动作(端口ip转换或者阻拦放行):
2.1 最基本的增删改查
增删改查的命令,我们以最常用的filter规则为例,就是最基本的防火墙过滤功能,实验环境我先准备了一个centos7的docker跑起来(docker好啊,实验完了直接删掉,不伤害本机),并通过iptables配置一些命令,然后通过主机向该docker发生ping包,测试增删改查的filter规则是否生效。
1.查询
如果有规则会把他的序号显示出来,后面插入或者删除可以用 iptables -nvL -t filter --line
可以看出filter规则可以挂载在INPUT,FORWARD,OUTPUT检查点上,并且兜底的规则都是ACCEPT,也就是没有匹配到其他规则就全部放行,这个兜底规则是可以修改的。 我们通过ifconfig查看出docker的ip,然后主机去ping一波:
然后再去查一下,会发现 packets, bytes ---> 对应规则匹配到的报文的个数/字节数:
2. 新增+删除 新增一条拒绝的报文,我们直接把docker0网关ip给禁了,这样就无法通过主机ping通docker容器了(如果有疑问,下面有解答,会涉及docker的一些小姿势): iptables -I INPUT -s ..0.1 -j DROP (-I不指定序号的话就是头插) iptables -t filter -D INPUT 1
可见已经生效了,拦截了ping包,随后我删除了这条规则,又能够ping通了
3. 修改 通过-R可以进行规则修改,但能修改的部分比较少,只能改action,所以我的建议是先通过编号删除规则,再在原编号位置添加一条规则。
4. 持久化 当我们对规则进行了修改以后,如果想要修改永久生效,必须使用service iptables save保存规则,当然,如果你误操作了规则,但是并没有保存,那么使用service iptables restart命令重启iptables以后,规则会再次回到上次保存/etc/sysconfig/iptables文件时的模样。
再使用service iptables save命令保存iptables规则
5. 自定义链 我们可以创建自己的规则集,这样统一管理会非常方便,比如说,我现在要创建一系列的web服务相关的规则集,但我查询一波INPUT链一看,妈哎,条规则,这条规则有针对mail服务的,有针对sshd服务的,有针对私网IP的,有针对公网IP的,我这看一遍下来头都大了,所以就产生了一个非常合理的需求,就是我能不能创建自己的规则集,然后让这些检查点引用,答案是可以的: iptables -t filter -N MY_WEB
iptables -t filter -I INPUT -p tcp --dport -j MY_WEB
这就相当于tcp目的端口的报文会被送入到MY_WEB规则集中进行匹配了,后面有陆续新规则进行增删时,完全可以只针对MY_WEB进行维护。 还有不少命令,详见这位大佬的总结:
回过头来,讲一个关于docker的小知识点,就是容器和如何通过主机通讯的?
这就是veth-pair技术,一端连接彼此,一端连接协议栈,evth—pair 充当一个桥梁,连接各种虚拟网络设备的。
我们在容器内和主机敲一下ifconfig:
看到了吧,容器内的eth0和主机的vetha9就是成对出现的,然后各个主机的虚拟网卡通过docker0互联,也实现了容器间的通信,大致如下:
我们抓个包看一哈:
可以看出都是通过docker0网关转发的:
最后引用一波 朱老板总结的常用套路,作为本章结尾:
1、规则的顺序非常重要。
如果报文已经被前面的规则匹配到,IPTABLES则会对报文执行对应的动作,通常是ACCEPT或者REJECT,报文被放行或拒绝以后,即使后面的规则也能匹配到刚才放行或拒绝的报文,也没有机会再对报文执行相应的动作了(前面规则的动作为LOG时除外),所以,针对相同服务的规则,更严格的规则应该放在前面。
2、当规则中有多个匹配条件时,条件之间默认存在“与”的关系。
如果一条规则中包含了多个匹配条件,那么报文必须同时满足这个规则中的所有匹配条件,报文才能被这条规则匹配到。
3、在不考虑1的情况下,应该将更容易被匹配到的规则放置在前面。
4、当IPTABLES所在主机作为网络防火墙时,在配置规则时,应着重考虑方向性,双向都要考虑,从外到内,从内到外。
5、在配置IPTABLES白名单时,往往会将链的默认策略设置为ACCEPT,通过在链的最后设置REJECT规则实现白名单机制,而不是将链的默认策略设置为DROP,如果将链的默认策略设置为DROP,当链中的规则被清空时,管理员的请求也将会被DROP掉。
3. go-iptables安装
go-iptables是组件库,直接一波import " github.com/coreos/go-ip...",然后go mod tidy一番,就准备兴致冲冲的跑一波自带的测试用例集,没想到上来就是4个error:
这还了得,我直接去go-iptables的仓库issue上瞅瞅有没有同道中人,果然发现一个类似问题:
虽然都是test failures,但是错的原因是不一样的,但是看他的版本是1.8的,所以我怀疑是我的iptables的版本太老了,一个iptables -v看一眼:
直接用yum update好像不能升级,yum search也没看到最新版本,看来只能下载iptables源码自己编译了,一套连招先打出来:
不出意外的话,那就得出点意外了:
那就继续下载源码安装吧,然后发现libmnl 又依赖libnftnl ,所以直接一波大招,netfilter全家桶全安装:
Finally,再跑一次测试用例就成功了,下面就可以愉快的阅读源码了:
4. 如何使用go-iptables
5. go-iptables源码分析
关键结构体IPTables
初始化函数func New(opts ...option) (*IPTables, error) ,流程如下:
几个重要函数的实现:
其他好像也米有什么,这里面就主要介绍一下,他的命令行执行是怎么实现的:
6. Reference