flutter大佬,Flutter 知乎

牛笔了!阿里P8大佬熬夜15天,把所有iOS知识体系整理成了PDF

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,还有65535,应用之间的互相调用等等问题,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。

创新互联主营榆次网站建设的网络公司,主营网站建设方案,重庆APP软件开发,榆次h5微信小程序开发搭建,榆次网站营销推广欢迎榆次等地区企业咨询

所以,当今的iOS移动开发,不会底层、算法、插件化、组件化,80%以上的面试都过不了。

阿里P8大佬每天熬夜到凌晨一两点,花了将近半个月时间将iOS逆向安防、算法、架构设计、多线程,网络进阶,还有底层、音视频、Flutter等等、iOS第三方开源框架整合成了一套系统知识笔记PDF,长达1042页!相信看完这份文档,你将会对这些iOS第三方框架有着更深入、更系统的理解。

底层原理毫无疑问还是iOS开发现在必备能力。

对象底层原理

指针与内存的一些相关面试

weak 弱引用

block 的原理

AutoreleasePool 原理

Runloop 的原理

Runtime相关、消息转发

性能优化以及架构能力相对比之前要求越来越多!

①性能优化方面:tableView的优化 - 界面卡顿原理 - app 性能分析 - 项目优化

②架构方面: 设计模式、解耦手段、组件化....

数据结构算法能力占比也比较大。通常一般大公司都会有一些笔试:虽然不在核心岗位对于数据结构算法要求不是非常严格,但是也会有一些常规的数据结构和算法的题

排序

数据结构设计

复杂度讨论

一些脑经急转弯的算法题

.....

现在的iOS开发为什么会遇到瓶颈是因为:前面储备过少,坐吃山空! 技术不断更新的时代,我希望你沉下心来与时俱进,不断储备技能为自己加分

这里我推荐学习:视觉方向! 无论直播还是小视频,图形图像处理成为必然的技能,未来5G时代的来临,这一块技术必将成为你与其他开发人员差距的赛点!

从性能方面来说,Flutter 的性能理论上是最好的,RN和Weex次之,并且都好于传统的 WebView方案

而从社群和社区的活跃来看,RN和Flutter无疑是最活跃的

总结:我个人针对现在的行情比较推荐大家学习:Flutter

学习iOS逆向的目的

大家都懂的 薪资高。。。。

1 学习优秀App的设计

当你看到一个App有一些非常好用的功能,你想学习或者你也需要实现相同的功能,这样你就可以逆向它的实现,去分析它的实现过程

2 更好的去加强自己开发App的安全

当你熟悉了iOS逆向工程,今后在开发自己App的时候,哪些地方更容易别被人攻破,从而有效的去避免

3 学习iOS系统未开源库的一些实现。

比如我们常用的UIKit的实现等等

4 视野更远了,iOS开发就会不在局限于画界面,数据,网络这些操作了

iOS逆向你能够了解到整个iOS系统的大致底层,内核,程序加载过程呀,App编译过程呀,等等

5 可以改变现有app的一些功能

去爱奇艺App的广告,微信抢红包等等。(当然这个学习可以,不可以作为商业利益,违法的)

现在都用什么框架开发软件或网页?

1. Spring

Spring框架是一款功能强大的轻量级Web应用开发框架。面对需要高性能的复杂Web应用需求,Spring能够提供出色的开发服务,因此它在各个框架中能够脱颖而出。Spring框架的核心宗旨是使得Java开发人员可以轻松地创建出企业级的应用程序。

Spring提供了包括:Spring MVC、Spring Core、Spring Security、Spring Transaction、Spring Boost、以及Spring ORM在内的许多模块,以方便企业应用根据实际情况灵活选用。如果您想深入了解其具体的使用场景和用法的话,可以参见《Spring框架注释指南(A Guide to Spring Framework Annotations)》。

优点

它提供了一个轻量级的容器,用户无需使用Web服务器、或应用服务器软件,即可启动之。

由于支持JDBC,因此可提高实际应用的生产率,并减少错误率。

Spring能够同时支持XML,以及基于注释的配置。

它提供了代码的向后兼容性,和可测试性。

2. JSF(Java Server Faces)

由Oracle开发的Java Server Faces(JSF),可用于创建企业级的应用程序、各种原生应用、以及Web应用的开发。它往往也被用于为基于Java的应用开发用户界面。

作为一款稳定的、且基于组件的MVC框架,JSF具有一种清晰的体系结构,用户可以用它来明确地区分出目标应用的逻辑和表示。

JSF只需通过拖放UI组件,即可帮助开发人员创建用户界面。开发者无需掌握诸如:HTML、CSS、JavaSript之类的高级客户端技术知识,便可用它来简化应用程序的表示层,并进行开发。

优点

JSF是Java EE的组成部分。

它提供了出色的工具和丰富的库。

由于允许用户使用Web界面,来扩展现有的后端Java代码,因此用户不必通过引入新的框架,来更改基本的应用程序。

3. Google Web Toolkit

Google Web Toolkit(GWT)是一个完全免费的,流行且开源的Web框架。它可以帮助开发人员针对Java Ajax应用进行开发和调试。

借助GWT,您可以编写出各种复杂的、基于浏览器的应用程序,而无需具备JavaScript等前端技术方面的专业知识。

当然,GWT也有一些独特的功能,其中包括:跨浏览器的可移植性、历史记录的管理、国际化、以及书签。许多Google产品,包括:AdSense、Google Wallet、以及Blogger都是使用GWT编写的。

优点

开源且完全免费。

对开发人员十分友好。

支持常见的Web开发任务重用。

Google API可以在GWT应用程序中被使用。

提供国际化、跨浏览器的可移植性、UI抽象、书签、以及历史记录管理。

4. Vaadin

Vaadin是一种用于简化Java开发的Web应用框架。它能够方便开发人员构建出自定义的Web开发服务。

该框架的主要优势在于客户端与服务器端之间可以流畅地通信。Vaadin可以从Java虚拟机处直接访问DOM。作为一个轻量级的框架,Vaadin Flow可被用于处理服务器端和客户端之间的路由通信。Vaadin允许开发者将Vaadin组件集成到他们正在使用的任何一款IDE中。由于Vaadin是跨平台类型的框架,因此用户无需将代码迁移到其他的平台上。

在使用Vaadin的过程中,开发人员不需要具有丰富的HTML、CSS、以及JavaScript经验。Vaadin会自动将Java转换为标记。

优点

通过支持拖放、以及其他出色的功能,它简化了Java应用单页UI的创建。

具有WebSocket支持的自动化“服务器端-客户端”通信方式。

使用MVC(Model-View-Controller)或MVP(Model-View-Presenter),来进行数据绑定。

带有嵌套路由和参数支持的路由器。

支持包括Kotlin和Scala在内的JVM语言。

内置了对于Spring的支持。

5. Hibernate

Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)型数据库,可被用于开发出稳定的Java框架。对象关系映射往往被用于横跨两个不兼容的系统,以连接数据。Hibernate在关系数据库管理系统(relational database management systems,RDBMS)和Java应用程序之间,提供了良好的通信。它非常适合工作在复杂的生态系统中,并对数据流实现无缝化。

在使用诸如Java之类的面向对象的语言时,开发人员往往会遇到被称为“对象关系阻抗不匹配”或“范例不匹配”的问题。Hibernate为开发人员提供了一个可以克服此类问题的框架。

Hibernate的查询与SQL类似,称为HQL(Hibernate查询语言)。Hibernate可以直接将Java类映射到相应的数据库表上,反之亦然。Hibernate在其主文件--hibernate.cfg.xml中,提供了使用数据库配置映射的各种Java类信息。

优点

一种强大的跨数据库解决方案。

可扩展。

数据可以轻松地实现转换。

可配置。

总结

希望上面介绍到的各种最受欢迎的、使用最广泛的Web应用开发Java框架,能够帮助您从易用性、配套文档、以及技术支持等需求维度,选出适合自己实际项目的框架。当然如果您是一名新手,那么我建议从《Java信息图(Java Infographic)》一文,快速熟悉并上手Java。

看我如何使用Flutter开发一款盯盘小工具

前言

最近街边讨论买基金大佬们又多起来了,一些技术交流群也时不时看到某某某大佬在讨论股票,看来最近行情很好啊,虽然我不懂交易,但我总觉得可以做些什么来弥补我的不足,于是有了接下来要跟大家分享的“盯盘小工具”。

准备开干

那么接下来我的目标是开发一款PC端的桌面盯盘小工具,特点首先就是小、方便整天盯着电脑屏幕的白领们打开瞧瞧,省去费事各种操作;然后就是无需关注太多费脑筋的指标,所以能够显示名称和涨跌幅即可。有的上面的需求后,那就可以开始搬砖了,但是对于我这种只懂点Android皮毛又没做过桌面应用的人来说,简直是比登天还难,那该咋办?在夜深人静时,我恍然想起了Flutter,没错先来一张图:

还记得当时看Flutter的时候还是1.2版本,如今回过头来看,已经不是曾经那个Flutter了。

搬砖

为了实现这个小小的业余需求并且又能学习Flutter,于是我白天下班回来又开始不同场景不同程序语言的搬砖,重新安装了Flutter的最新开发环境,重新学习Flutter开发-万物皆widget。

功夫不负有心人

效果图展示

当前为最初版本,很多功能还不够完善,后续目标就是完善及优化,

GitHub项目地址:

致谢

为了实现这个小小的业余需求并且又能学习Flutter,我也参考了很多Flutter大佬的开源项目,在此感谢所有优秀的开源项目 _ 。

那些 40 岁的程序员都去哪了?

前些时候北京市政府做了一个关于 996 的调研,第一时间我参与了调研,同时发到所有读者群,让大家一起发声。

不少朋友开始热烈的讨论起来,有人很乐观认为这是改变的开始,也有人觉得这就是走一个形式。 不管怎么说,也算看到政府针对这个问题开始有行动了。

其实 996 最残酷的一点是:年纪大的人很容易被无情淘汰。中国互联网的 35 岁危机是和 996 盛行分不开的。

996 对于打工人来说,绝不可能常态化!

为什么不能常态化? 从生理规律上看,脑力劳动者如果不以进 ICU 为目标,那么每天能够认真投入的时间,八小时也就到极限了。 人毕竟不是机器,是血肉之躯!

但中国老板普遍希望程序们 996,别激动别骂,这是残酷的现实。

同时中国老板们偏爱年轻人,为什么?很简单,老了之后,你舔活速度显然没有年轻人来的卖力,来的凶猛!长年累月的辛苦劳作,已经让你这颗螺丝钉生锈甚至发霉了!如果你是老板,这个时候你还要支付比年轻人多 2 倍的薪资,你怎么选?

更别提,年纪这么大的你,还有各种猝死风险 ,拿最近的 pdd 猝死事件来说,在超级大小周(996+997)的压力下,这么年轻的女孩都猝死了,更何况 40 岁的一线码农?那猝死率该得多高了?企业的商誉还要不要了?

显然,资本家一定会作出最商业最正确的选择:年轻人,甚至是刚毕业的大学生,这些最新鲜的韭菜才是他们的最爱。

所以,对于打工人尤其程序员而言,996 本身反而不是最大问题,最大问题是我们如何跨越大龄危机。

相比等待环境发生改变,不如主动思考清楚这个问题。

想起去年写过的一篇旧文,再次分享给大家,讲的是我身边五个大龄程序员的故事,绝对真实的经历分享,有洋哥的同学、朋友、下属,他们都成功的跨越了 35 岁危机,希望他们的经历对大家有一点点启发:

1.沉迷是一种力量

第一次见 A 君是 10 年前参加人人网的面试,他是面试官,那个时候 A 君 35 岁,担任后端 leader。入职后,我发现,他用于做管理的时间不多,90% 时间在疯狂编码。

A 君基本没有社交,上班就是撸代码,下班就是回家带孩子。他对优秀的工程师容忍度极高,对差一点的完全没耐心。

偶尔能听见他训斥下属的吵闹声:“这个类写成这样,你没看代码规范吗?”、“这个线程池不能这么用,给你说多少次了!”、“是你没听清楚还是我没讲清楚?不能这么干!”。

一次下班,和他一起回家,一路上给我讲各种编程技巧和方法论,我听的津津有味。聊了差不多半小时,心想可以换个话题了,于是我问:“您周末 娱乐 都干些什么呢?”,他是这样回答的:“我会去看些开源代码,自己改着玩很有趣”。那一刻,空气都凝固了,这话我实在没法接下去了。

后来有一天,A 君上班拍桌子,暴怒之后冲了出去。大家一脸懵逼,后来才知道,原来是大 Boss 批评他不懂管理,只知道埋头写代码。

几年前,和他在微信聊了一次。他去了一家创业公司做技术负责人,我很好奇,很想知道这次他是怎么做管理的。

我问他:“您现在是怎么带团队的”,这一问不要紧,聊了半小时。从 Flutter 的优越性到微服务的落地,再到 Google 出了什么新技术,顺带鄙视了一些还在用落后技术的公司。一顿硬核技术科普下来,收获挺大,但是管理这两个字?嗯,不存在的。

我现在理解了,他压根就不关心管理,聚集一帮极客跟他一起成长战斗才是最开心的事情。

A 君今年快 50 了,前不久和其他人聊起他,大家都感叹,这老哥战斗力太强了,真是那种一顶十的程序员。

有时候,沉迷是一种力量,焦虑?不存在的.....

想起 A 君给我说的那句:“我要开心 coding 到 80!”。我真心相信他能做到。

2.不服就是干

这次说说我的好朋友 B 君,今年 40 岁,曾经鹅场的高级工程师,7 年前,晋升失败一怒之下开启了创业之路。

我们是在 CSDN 论坛上认识的,他帮我解决了一个底层操作系统级的防劫持问题。后来经常问他一些排查线上故障的方法论、微服务怎么拆分、如何做出能抗更高并发的架构,他都非常耐心的指导我,他还有句口头禅:不服就是干!

B 君出来创业没拿融资,自己投了 100 万。团队 5 个人,挤在一个很小的民房。创业期间找他喝酒,他告诉我:“我一定要改变世界,否则我会被世界改变”。

一年后,再次去找他喝酒,这次他脸色灰暗,人也非常低迷。原来前期 100 万烧完,又投入了 50 万积蓄,项目还是没有做成。酒过半巡,他突然抱着我哭了起来,我这才得知因为积蓄全部烧完,他女朋友已经和他分手了。

再后来,他回到大厂当程序员,级别薪资跟创业前相差无几。谈起创业经历,我为他惋惜,而他并不后悔。

两年前,他开始炒比特币,炒着炒着嫌这些交易平台做得都不够好,于是空余时间动手做了一个交易平台。

去年,B 君告诉我,他的交易平台融资 500 万,再次出来创业。第二次创业,他已平和很多,没有豪言壮语,让公司活下去是最大目标。

今年听说 B 君的公司已经快 30 人了,为他祝福,相信他一定能改变世界。

有时候,我们需要点不服就是干的精神!

3.反焦虑

这次上场的是 C 君,硕士师兄,40 岁。C 君是一名大厂总监,他花了四年时间跳了三次才来到当下的这家大厂扎根下来,带 100 人团队,每个月安安稳稳拿高薪,不用担心公司倒闭的风险。

以 C 君的专业技能和学历背景、工作经历,其实完全不需要担心没工作。可他总是莫名担忧,害怕自己没有创造更多价值。

100 人的团队不是那么好带,除了技术之外还需要精通业务产品、精通组织流程、掌握良好的沟通推动技巧、在大厂还需要明争暗斗。

一次和 C 君聊天,他感叹到:“还是写代码有安全感,做管理不仅心累还觉得自己没创造价值”,可不是,这种焦虑几年前我也感同深受。

大厂的高 P 看起来风光无比,其实要跳槽也不容易,毕竟中小公司能接得住大厂高 P 薪资期权总包的,并不多。

有时候,不是现在取得了成就就会开心,决定因素是你未来会不会更好,如果答案是否定的,不仅不会开心还有可能带来焦虑。

C 君就陷入这种焦虑当中,总是担心未来的上升空间和 40 岁以后的收入。特别是大厂还有年龄线的要求,到一定年龄不能晋升就有可能被淘汰。

有一段时间,公司领导层波动,他面临被连带的危险,甚至需要依靠抗抑郁的药物。但最终他依靠持续有规律的运动和学习新领域克服过来。

C 君给我提的最多的话: “反焦虑很重要”, 是啊,真的重要,从 C 君身上我真正学到了一点:无论你是否能成功,首先要反焦虑。

4.舍命狂奔

这次要说的是清华 MBA 同学 D 君,39 岁。他在通讯行业干了 10 多年,超级专家那种,带十人团队。

问起他读 MBA 的原因,他很坚定的说:“我对投资非常感兴趣,就是为了转行投资才这么大年纪了还选择读书”。

清华 MBA 课程安排的很紧张,我们都是六日班,也就周六半天周日全天,而他公司的工作非常忙,几乎 996,但从没见过他迟到过一次。

三年时光,D 君在跟时间赛跑,小组讨论、企业访谈、课程作业,他都完成的堪称完美。有一次我问他,你为什么这么拼?他说,当你笃定一件事,确定一个目标,那剩下的只有舍命狂奔。

毕业后,D 君如愿以偿加入一家投行,当上了投资人。有一次很好奇的问他投资人的收入,他告诉我刚入行薪资很低,只有之前做架构师带团队的 1/3。但他说这话的时候,一脸幸福感。

去年 D 君已经晋升为所在机构的合伙人级别,为他感到开心。

5.接受现实

最后上场的是老同事 E 君,41 岁。他是那种职场老黄牛。属于领导让做什么就做什么的人,任劳任怨勤勤恳恳,但个人成长一直比较缓慢。

前几年开始 E 君就不太顺了,因为编码能力一直没有达到高级或者架构师水平。他其实一直在跟年轻人拼体力,而随着年龄增大,是真拼不过了。我和他经常讨论的话题是颈椎病如何康复。

去年 E 君所在公司效益不太好,领导决定裁员,他进入了优化名单。被优化后,他休息整顿了好久,将原来 90kg 的体重减到现在的 75kg,颈椎病也恢复不少。再开始找工作,大概花了几个月时间,他终于找到了一个不那么满意的 Offer。

听到他找到下家的消息,我还挺为他开心的,因为这个过程我也帮他各种投简历,但大佬朋友们一听说 41 岁还是中级水平,都不太愿意给面试机会。

没想到过了半年,我和他吃饭,他对我说:“洋哥,我没有入职这家公司,我想明白了,继续做程序员对我来说没意义。我拿积蓄开了个小店”,刚听到消息,我非常惋惜,编码十多年最后却去做小生意,在我眼里就是逃兵。

直到最近去他小店玩,我才发现,这也是另一种好的生活。他开的是一个小型亲子游乐园,带上小孩,一边陪小孩一边工作,月收入也不差,养家完全没问题。这一瞬间,我产生了一种羡慕的情绪。

有时候,接受现实然后重新出发,未尝不是一个更好的选择。

最后的话

程序员不是一个「银发职业」,但也绝不是如某些贩卖焦虑的自媒体宣传的那样:35 岁危机,40 岁失业。

40 岁的程序员有的做了大厂中高管、有的成了小公司联创、有的成了连续创业者、还有的转行投资金融、也有人继续坚持写代码战斗在一线。

不可否认,有一部分人会被行业淘汰出局,但互联网的老年人在其他行业恐怕还是年轻人,接受现实,人生再起航完全没问题。

最重要的是,我们不能因为年纪的增长而焦虑,因为焦虑本身除了干扰我们成长,没有任何意义。

尽最大努力,做最好打算,但接受最坏的结果。在这个复杂多变的 社会 ,反焦虑、不断提升认知,不断充实自己的专业技能将永远重要。

flutter项目升级2.0过程填坑记录

在此之前先推荐看大佬的: 填坑指导

iOS需要注意:

1、flutter2.0要求cocoapods 升级到1.9.0

详情看这篇博客

2、原来flutter项目中的podfile文件是旧版本的ccocoapods了,删除podfile和对应的.lock,然后flutter项目重新运行使用它自动生成的podfile文件

3、安装CocoaPods

卸载cocoapods:sudo gem uninstall cocoapods

查看cocoapods版本:pod --version

指定版本安装:

sudo gem install -n /usr/local/bin cocoapods -v 1.9.3(新MacOS系统升级)

不指定版本安装

sudo gem install -n /usr/local/bin cocoapods

说明 :老项目sdk1.17.0===升级到2.0.1,当前所有操作基于win平台

到此为止环境已经准备妥当,正式进入项目修改。

所有的插件都要适配到空安全,插件是否支持均会有对应说明Null safety,适配过程不确定版本的话,可以使用dio: any,适配完事后再在pubspec.lock文件中查看具体的版本修改过来,实在有部分插件没有支持的,参考下面

部分插件在适配空安全的版本放弃维护了,得自行更新或寻找替代,如: flutter_swiper 变为 flutter_swiper_null_safety ,插件更新后要注意项目中的用法是否需要更新

2.1.1: 以前采用的是 provide 插件共享全局数据,现在变化为 provider ,用法改变, 点击参考 ,以防文章丢失,我重复一遍:

比如:

2.1.2: dio版本升级到4.0.0最新版后,部分用法改变

2.2.1

2.2.2

解决方案:

2.2.3

解决方案:

2.2.4

解决方案:

2.2.5

解决方案:

2.2.6

解决方案:

2.2.7

解决方案:

2.2.8

解决方案: child 换为sliver

2.2.8.1

解决方案: 项目目录下: android--app-build.gradle --minSdkVersion改为:18 或者19

2.2.8.2

解决方案: 在pubspec.yarm管理里面添加:publish_to

2.2.8.3

解决方案: video_player升级后字段发生了变化,initialized字段更换为:isInitialized(_controller.value.isInitialized)

2.2.8.4

解决方案:

2.2.8.5

解决方案:

2.2.8.6

解决方案: 方案一:删除ios目录下的Podfile.lock 文件然后重新运行 pod install命令

方案二:删除ios目录下的Podfile.lock与Podfile文件 重新运行flutter run或flutter build ios

方案三:删除ios目录,重新运行 flutter create . 命令,注意有"."这个符号不要忘记

2.2.8.7

这个报错一般对应的就是下面的报错,注意看后面的报错信息,看是哪个插件报错。

解决方案: 把Podfile的版本注释打开,改为platform :ios, '9.0' 或者是更高的版本

全局替换

1.将new List() 替换为[];

2.TextField的inputFormatters:[WhitelistingTextInputFormatter.digitsOnly] 替换为[FilteringTextInputFormatter.digitsOnly]

3.TextField的inputFormatters:[WhitelistingTextInputFormatter(RegExp("[a-z|A-Z|0-9]"))]替换为FilteringTextInputFormatter.allow(RegExp("[a-z|A-Z|0-9]"))

4.Stack组件中overflow: Overflow.visible改为 clipBehavior: Clip.none;overflow: Overflow.clip改为clipBehavior:Clip.hardEdge

5.ListWheelScrollView组件中clipToSize = false改为clipBehavior: Clip.none,clipToSize = true改为 Clip.hardEdge

6.TextField中maxLengthEnforced: true改为maxLengthEnforcement:MaxLengthEnforcement.enforced

7.FlatButton、RaisedButton、OutlineButton的变化: 官方参考

颜色的属性发生了变化,由原来的Color 变为了MaterialStatePropertyColor, 这是未了解决不同状态(pressed、hovered、focused、disabled)下按钮颜色的变化

例如

8.出现如下警告

9.showSnackBar报错误

解决方案: Scaffold换为ScaffoldMessenger

10.textSelectionColor弃用

解决方案:

11.charts_flutter升级后属性报错

解决方案:

12.flutter 真机调试无法访问网络,dio报错

解决方案:

android:

ios:

问题12完整参考


当前题目:flutter大佬,Flutter 知乎
网页URL:http://hbruida.cn/article/dsdsgos.html