首页 文章 精选 留言 我的

精选列表

搜索[web开发框架],共10000篇文章
优秀的个人博客,低调大师

开发笔记4 | Java 代码规约第 3 条

返回规约清单列表 规约类型:编程规约 - 命名风格 规约级别:强制 规约描述:类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外: DO / BO / DTO / VO / AO 正例: MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例: macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion 驼峰式命名法分大驼峰式命名法(UpperCamelCase)和小驼峰式命名法(lowerCamelCase)。 有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如"IPv6"或"iOS")。Google指定了以下的转换方案。 名字从散文形式(prose f

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

开发笔记3 | Java 代码规约第 2 条

返回规约清单列表 规约类型:编程规约 - 命名风格 规约级别:强制 规约描述:代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式 说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式,也要避免采用。 正例: alibaba / taobao / youku / hangzhou 等国际通用的名称, 可视同英文 反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 1、如果某些变量的英文是比较冷僻的单词,也要使用英文来进行命名,同时,可以对这个变量进行一些啰嗦的注释,以便阅读代码的人能够结合注释看明白该变量; 延伸阅读:15 Best Practices of Variable & Method Naming 说明:内容摘自《阿

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

Java 开发新选择?Apache NetBeans IDE 9.0 备受好评

Apache NetBeans 9.0 目前已发布Beta 版本,离正式版本越来越近。9.0 版本的主要目标囊括 Oracle 捐赠的大量代码,以及提供 Java 9 和 10 支持。 Apache NetBeans 近期在社区上发起了一项满意度调查,用于验收用户如何对 9.0 版本的看法,以及与8.2 版本的对比。日前,该调查结果公布,具体如下: 整体品质方面,32.5%的用户认为Apache NetBeans IDE 9.0 优于 8.2,有 10.3% 的用户认为8.2 更好,57.3% 的用户认为二者相差不大。 性能方面,依然是大多数用户认为差距并不明显,有 27.4% 的用户认为Apache NetBeans IDE 9.0 优于 8.2 。 高达 75.2 %的受访用户认为 Apache NetBeans IDE 9.0 的 Java 编辑功能符合他们的预期,另有 18.8% 的人认为还存在一些问题有待完善。其中,吐槽点主要集中在代码完成和编译上。 对于 Java 调试器,65.8% 的用户认为 Apache NetBeans IDE 9.0 提供了足够的调试支持。有意思的,有 14.5% 的受访用户表示他们根本不使用 Apache NetBeans 中的 Java 调试功能,或许他们正在同时使用另一款 IDE ? 最后,约有 2/3 的受访者认为 Apache NetBeans IDE 9.0 对Java 重构的支持是合适的。但是,也有超过 20% 的用户认为存在一些需要解决的问题。比如有评论指出“删除和重命名文件不一致会引发异常,更改接口类型有时也会导致异常,接口类型会发生变化,但所有实现都需要手动更改“等等。此外,有 8.5% 的人表示他们不使用 NetBeans 的 Java 重构功能。 调查结果报告地址 对于 Apache NetBeans IDE 9.0 ,你怎么看?是否会在日常工作中使用?欢迎评论。 本文来自云栖社区合作伙伴“开源中国” 本文作者:王练 原文链接

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

Android开发教程 - 使用Data Binding(二)集成与配置

本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fragment中的使用 使用Data Binding(五)数据绑定 使用Data Binding(六)RecyclerView Adapter中的使用 使用Data Binding(七)使用BindingAdapter简化图片加载 使用Data Binding(八)使用自定义Interface 使用Data Binding Android Studio不能正常生成相关类/方法的解决办法 安装依赖库,配置工程 Data Binding安装和配置都非常简单,仅需简单的两步即可完成。 更新SDK 打开SDK管理工具,下载最新的Android Support库。 配置工程的Gradle android { … dataBinding { enabled = true } } 加入完成后,然后点击Sync Now,完成后就可以使用Data Binding强大的功能了。 总结 这一篇我们介绍了Data Binding的配置,下一篇我们将介绍在Activity中使用Data Binding的内容,请点击:使用Data Binding(三)在Activity中的使用 如有更多疑问,请参考我的其它Android相关博客:我的博客地址

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

Python开发的十个Tips,你知道几个?

下面是十个Python中很有用的贴士和技巧。其中一些是初学这门语言常常会犯的错误。 注意:假设我们都用的是Python 3 1. 列表推导式 你有一个list:bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子:[2, 4, 6, 8, 10] 大多初学者,根据之前语言的经验会大概这样来做 bag = [ 1 , 2 , 3 , 4 , 5 ] for i in range(len(bag)): bag[i] = bag[i] * 2 但是有更好的方法: bag = [elem * 2 for elem in bag] 很简洁对不对?这叫做Python的列表推导式。 2. 遍历列表 还是上面的列表。如果可能尽量避免这样做: bag = [ 1 , 2 , 3 , 4 , 5 ] for i in range(len(bag)): print(bag[i]) 取而代之的应该是这样: bag = [ 1 , 2 , 3 , 4 , 5 ] for i in bag: print(i) 如果x是一个列表,你可以对它的元素进行迭代。多数情况下你不需要各元素的索引,但如果你非要这样做,那就用enumerate函数。它像下边的样子: bag = [ 1 , 2 , 3 , 4 , 5 ] for index, element in enumerate(bag): print(index, element) 非常直观明了。 3. 元素互换 如果你是从java或者C语言转到Python来,可能会习惯于这样: a = 5 b = 10 # 交换 a 和 b tmp = a a = b b = tmp 但Python提供了一个更自然更好的方法! a = 5 b = 10 # 交换a 和 b a, b = b, a 4. 初始化列表 假如你要一个是10个整数0的列表,你可能首先想到: bag = [] for _ in range( 10 ): bag.append( 0 ) 换个方式吧: bag = [0] * 10 看,多优雅。 注意:如果你列表包含了列表,这样做会产生浅拷贝。 举个例子: bag_of_bags = [[ 0 ]] * 5 # [[0], [0], [0], [0], [0]] bag_of_bags[ 0 ][ 0 ] = 1 # [[1], [1], [1], [1], [1]] Oops!所有的列表都改变了,而我们只是想要改变第一个列表。 改一改啦: bag_of_bags = [[ 0 ] for _ in range( 5 )] # [[0], [0], [0], [0], [0]] bag_of_bags[ 0 ][ 0 ] = 1 # [[1], [0], [0], [0], [0]] “过早优化是万恶之源” 问问自己,初始化一个列表是必须的吗? 5. 构造字符串 你会经常需要打印字符串。要是有很多变量,避免下面这样: name = "Raymond" age = 22 born_in = "Oakland, CA" string = "Hello my name is " + name + "and I'm " + str(age) + " years old. I was born in " + born_in + "." print(string) 额,这看起来多乱呀?你可以用个漂亮简洁的方法来代替,.format。 这样做: name = "Raymond" age = 22 born_in = "Oakland, CA" string = "Hello my name is {0} and I'm {1} years old. I was born in {2}." .format(name, age, born_in) print(string) 6. 返回tuples(元组) Python允许你在一个函数中返回多个元素,这让生活更简单。但是在解包元组的时候出出线这样的常见错误: def binary(): return 0 , 1 result = binary() zero = result[ 0 ] one = result[ 1 ] 这是没必要的,你完全可以换成这样: def binary(): return 0 , 1 zero, one = binary() 要是你需要所有的元素被返回,用个下划线_: zero, _ = binary() 就是这么高效率! 7. 访问Dicts(字典) 你也会经常给dicts中写入key,value(键,值)。 如果你试图访问一个不存在的于dict的key,可能会为了避免KeyError错误,你会倾向于这样做: countr = {} bag = [ 2 , 3 , 1 , 2 , 5 , 6 , 7 , 9 , 2 , 7 ] for i in bag: if i in countr: countr[i] += 1 else : countr[i] = 1 for i in range( 10 ): if i in countr: print( "Count of {}: {}" .format(i, countr[i])) else : print( "Count of {}: {}" .format(i, 0 )) 但是,用get()是个更好的办法。 countr = {} bag = [ 2 , 3 , 1 , 2 , 5 , 6 , 7 , 9 , 2 , 7 ] for i in bag: countr[i] = countr.get(i, 0 ) + 1 for i in range( 10 ): print( "Count of {}: {}" .format(i, countr.get(i, 0 ))) 当然你也可以用setdefault来代替。 这还用一个更简单却多费点开销的办法: bag = [ 2 , 3 , 1 , 2 , 5 , 6 , 7 , 9 , 2 , 7 ] countr = dict([(num, bag.count(num)) for num in bag]) for i in range( 10 ): print( "Count of {}: {}" .format(i, countr.get(i, 0 ))) 你也可以用dict推导式。 countr = {num: bag.count(num) for num in bag} 这两种方法开销大是因为它们在每次count被调用时都会对列表遍历。 8 使用库 现有的库只需导入你就可以做你真正想做的了。 还是说前面的例子,我们建一个函数来数一个数字在列表中出现的次数。那么,已经有一个库就可以做这样的事情。 from collections import Counter bag = [ 2 , 3 , 1 , 2 , 5 , 6 , 7 , 9 , 2 , 7 ] countr = Counter(bag) for i in range( 10 ): print( "Count of {}: {}" .format(i, countr[i])) 一些用库的理由: ●代码是正确而且经过测试的。 ●它们的算法可能会是最优的,这样就跑的更快。 ●抽象化:它们指向明确而且文档友好,你可以专注于那些还没有被实现的。 ●最后,它都已经在那儿了,你不用再造轮子了。 9. 在列表中切片/步进 你可以指定start的点和stop点,就像这样list[start:stop:step]。我们取出列表中的前5个元素: bag = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] for elem in bag[: 5 ]: print(elem) 这就是切片,我们指定stop点是5,再停止前就会从列表中取出5个元素。 要是最后5个元素怎么做? bag = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] for elem in bag[- 5 :]: print(elem) 没看明白吗?-5意味着从列表的结尾取出5个元素。 如果你想对列表中元素间隔操作,你可能会这样做: bag = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] for index, elem in enumerate(bag): if index % 2 == 0 : print(elem) 但是你应该这样来做: bag = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] for elem in bag[:: 2 ]: print(elem) # 或者用 ranges bag = list(range( 0 , 10 , 2 )) print(bag) 这就是列表中的步进。list[::2]意思是遍历列表同时两步取出一个元素。 你可以用list[::-1]很酷的翻转列表。 10. tab键还是空格键 长时间来看,将tab和空格混在一起会带来很多不必要的麻烦,你会看到IndentationError: unexpected indent。不管你选择tab键还是空格键,你应该在你的文件和项目中一直保持使用。 一个使用空格而不是tab的原因是,tab不是在所有编辑器中都一样的。视呢所用的编辑器,tab可能会被当作2到8个空格。 你也可以在写代码时用空格来定义tab。这样你可以自己选择用几个空格来当做tab。大多数Python用户是用4个空格。 原文发布时间为:2018-10-8 本文来自云栖社区合作伙伴“机器学习算法与Python学习”,了解相关信息可以关注“机器学习算法与Python学习”。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册