`
michael8335
  • 浏览: 189629 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

由一段代码发表一点想法

阅读更多
今天在公司发现了一段很怪异的代码,为此还跟公司员工争执了一下,但由于自身是新员工,我只有无奈的屈服了,心里确实不爽,在这里发表一下自己的看法。先看一下代码,代码已经我已经简化了,只有两个类,一个是action层,另一个是Service层,具体如下:
Action:
package com.yf.test;

import java.util.List;

public class Action {
	public void excute(){
		List list=null;
		list=Service.doSomething();
		if(list.isEmpty()){
			/*
			 *此处省略其他操作
			 */
		}
	}
}

Service
package com.yf.test;

import java.util.ArrayList;
import java.util.List;

public class Service {
	public static List doSomething() {
		List list = new ArrayList();
		if(1==2){
			/*
			 * 此处省略对list的其他操作
			 *  list=.....
			 */			
		}
		return list;
	}
}

当我看到if(list.isEmpty()){时,发现潜在产生空指针异常的可能,然后就给同事说了一下,这里应该先判断List是否为null,然后他让我看Service层,说Service不会返回null,我看了一下,确实不会返回为null,但是关于这段代码,我觉得写的实在太烂,为什么烂,主要有一下几个原因:
1、在Service层,每次调用doSomething方法时,都实例化一个List,虚拟机都会在堆中为这个list开辟内存,这无疑实在浪费内存和虚拟机的,而且这个list只有在if条件成立时,才需要,如果if不成立,虚拟机还得在方法调用结束后,回收这块内存,这难道不是没事找事吗??
2、在Action层,action不对返回的list做非null判断,这也是一种很恶心的做法,首先,根据面向对象的封装性,Service层中的实现对Action而言,应该是不可见的,Action层应该对其返回值的可能情况做判断,即list!=null必须在Action做,如果后续Service层单独抽出,以API提供Jar包的形式,即我们无法知道里面的具体细节,这时,Action层还得做非空判断。因此,本人觉得,这段代码应该做如下重构
Action:
package com.yf.test;

import java.util.List;

public class Action {
	public void excute(){
		List list=null;
		list=Service.doSomething();
		if(list!=null&&list.isEmpty()){
			/*
			 *此处省略其他操作
			 */
		}
	}
}

Service
package com.yf.test;

import java.util.ArrayList;
import java.util.List;

public class Service {
	public static List doSomething() {
		List list=null;
		if(1==2){
			list= new ArrayList();
			/*
			 * 此处省略对list的其他操作
			 *  list=.....
			 */			
		}
		return list;
	}
}

或许并不是每个人都认同我这种做法,不过我个人觉得这样比较合理,软件设计的时候要讲究层次,各层应该干得事情,就应该在所在层做好,而不是有其下层来保证,这种强依赖下层保证是一种很恶心的做法,如果后续下层代码逻辑变更,还得去上层看看对其的影响,这就很无耻了!!!
21
13
分享到:
评论
38 楼 hlylove 2012-10-15  
syx278250658 写道
final List<String> someList = Service.doSomething();    
if(CollectionUtils.isEmpty(someList)){    
   .  
   .  
   . 


不管service如何,action这样判断是应该的


我也是这样的
37 楼 iceblooded 2012-10-15  
看下面的评论 学习了
36 楼 gwei 2012-10-15  
拜读了,个人认为像这种返回结果集对象的服务方法最好不要返回null,返回null无意义。至于什么内存开销太较真了吧,这算什么,在远程的情况下说不定都不在一个环境中。程序健壮性应该得到保证,Action还是应该判断NP吧,至于方式还是按项目组规范。拙见拙见。
35 楼 beiyeren 2012-10-15  
骨之灵魂 写道
flashing 写道
sqtds 写道
opnmzxcvb 写道
kidneyball 写道
1. 容器类型的底层方法应该尽量返回空集,避免返回null。从而避免顶层方法做大量的null判断。具体可参考《Effective Java》。

2. 一个以容器为返回类型的方法,返回空集通常是不常见的异常分支,为一个不常见的分支考虑类创建和垃圾回收层面上的性能问题而导致调用者做大量的额外NP判断并不值得。这类优化应该在有profiling数据支持的情况下再做。

3. “具体细节不可见”的问题,写点Javadoc就能解决。调用者需要参考接口文档知道返回值的具体情况,是很正常的事情。后续维护时要保证接口协议不变,也是很正常的事情。

4. 某些团队都会形成共识,只要是返回容器类型的方法就不返回null。只要大家都遵守这个协议,不会出问题而且可以免去大量无谓的NP判断。博主作为一个新人,应该先了解团队中的开发规范,而不是和现有规则较劲。

说的对,  

看看effective java

yeah,我也想说 effective java

看看effective java


分析的很到位
34 楼 congjl2002 2012-10-15  
michael8335 写道
young_suse 写道
楼主的担心也很合理,每次在方法开头用List list = new ArrayList();确实可能造成不必要的开销。
但从代码规范的角度来讲,声明为集合(List或数组)返回类型的函数,通常不要返回null,宁可返回size为0的空集合。
要达到既减少内存开销,又规范代码,应该使用List list = Collections.emptyList()来取代List list=null;并且按照kidneyball说的,用javadoc来说明,当条件不满足时,返回size为0的List,而不会返回null。

由于我编码时间不长,所以估计是我自身理解确实有问题,不过通过这篇文章,获得了一些知识,看来大家的意见还是倾向于不返回null,那就按照大家的来吧,反正我只是就这段代码发表一下自己的看法,谢谢大家的意见,后期会买一本《Effective Java》,在设计方面继续积累

你们员工可以坚持不实用Null说明他们水平不错,你有机会多向他们学习,不要总想去质疑他们的代码,毕竟在编程里有这样一个规定“习惯大于配置”,编程时间短,有很多行规你还不清楚,因此要虚心,但也不是就全盘接受,你有这个分析问题的想法很好,只是要注意方法
33 楼 lianglaiyang 2012-10-15  
forcer521 写道
jorneyR 写道
在职场中,不要轻易去表现出质疑别人的东西,就算那东西再差,自己不赞同,也尽量不要表现出来,人心难测,除非你有决策权的时候。


很有经验啊,呵呵。
我们程序员很多时候就是缺乏这种思维能力。
很多时候,做的对并不能得到大家的认可的。

那是自己一厢情愿的认为自己对,其实最终可能会发现自己错的离谱,是那么可笑。。。
32 楼 骨之灵魂 2012-10-15  
flashing 写道
sqtds 写道
opnmzxcvb 写道
kidneyball 写道
1. 容器类型的底层方法应该尽量返回空集,避免返回null。从而避免顶层方法做大量的null判断。具体可参考《Effective Java》。

2. 一个以容器为返回类型的方法,返回空集通常是不常见的异常分支,为一个不常见的分支考虑类创建和垃圾回收层面上的性能问题而导致调用者做大量的额外NP判断并不值得。这类优化应该在有profiling数据支持的情况下再做。

3. “具体细节不可见”的问题,写点Javadoc就能解决。调用者需要参考接口文档知道返回值的具体情况,是很正常的事情。后续维护时要保证接口协议不变,也是很正常的事情。

4. 某些团队都会形成共识,只要是返回容器类型的方法就不返回null。只要大家都遵守这个协议,不会出问题而且可以免去大量无谓的NP判断。博主作为一个新人,应该先了解团队中的开发规范,而不是和现有规则较劲。

说的对,  

看看effective java

yeah,我也想说 effective java

看看effective java
31 楼 lianglaiyang 2012-10-15  
参考大部分开源框架API,返回集合时都不会返回null这一种情况!当今什么时代了,如果一般应用程序的话那一点内存根本可以忽略不计
30 楼 fwmlove 2012-10-15  
我怎么觉得Service层的重构跟没重构一样,你就算NUll不NULL也好,这个List在Service层里面又不是成员变量,只要是同个线程内,你每次调用这个方法,原来的那个就会可以被回收啦。不知道我理解有没有问题。
29 楼 vvggsky 2012-10-15  
防御式编程 未尝不可
28 楼 zuoshu 2012-10-15  
skzr.org 写道
尽量不返回null——说实在的就算返回了null,你又能做什么了。
——你只能得到一大堆的if (xxx == null) ...,如果直接返回empty集合,代码更加简洁易懂

绝大多数情况(99%)empty集合更加合适。
过早的优化——万恶之源啊。。。

既然意识到只能保证99%,为何不优化到100%,程序的健壮性何在!
27 楼 kyfxbl 2012-10-15  
我只能说楼主乐于思考的精神还是很好的,应该保持
26 楼 skzr.org 2012-10-15  
尽量不返回null——说实在的就算返回了null,你又能做什么了。
——你只能得到一大堆的if (xxx == null) ...,如果直接返回empty集合,代码更加简洁易懂

绝大多数情况(99%)empty集合更加合适。
过早的优化——万恶之源啊。。。
25 楼 syx278250658 2012-10-15  
final List<String> someList = Service.doSomething();    
if(CollectionUtils.isEmpty(someList)){    
   .  
   .  
   . 


不管service如何,action这样判断是应该的

24 楼 jinnianshilongnian 2012-10-15  
rensanning 写道
jinnianshilongnian 写道
当然还有一种叫做契约式编程:

在service返回时 加:
Assert.assertNotNull(list);  来强制约束返回值不为null 

契约的缺点就是靠程序员意识,写不写很难控制

spring对契约式编程的支持:
http://jinnianshilongnian.iteye.com/blog/1495594

产品代码中一般很少见JDK Assertions,多见于调试或者测试。运行时默认是关闭状态,即使开启,它所抛出的AssertionError异常扩展自Error而不是Exception,会扰乱系统的异常处理。普遍的框架中对采用IllegalArgumentException,比如Spring的org.springframework.util.Assert

不是java自带的assert断言  而是自己扩展的一套 正如你说的如Spring的
23 楼 rensanning 2012-10-15  
jinnianshilongnian 写道
当然还有一种叫做契约式编程:

在service返回时 加:
Assert.assertNotNull(list);  来强制约束返回值不为null 

契约的缺点就是靠程序员意识,写不写很难控制

spring对契约式编程的支持:
http://jinnianshilongnian.iteye.com/blog/1495594

产品代码中一般很少见JDK Assertions,多见于调试或者测试。运行时默认是关闭状态,即使开启,它所抛出的AssertionError异常扩展自Error而不是Exception,会扰乱系统的异常处理。普遍的框架中对采用IllegalArgumentException,比如Spring的org.springframework.util.Assert
22 楼 jinnianshilongnian 2012-10-15  
当然还有一种叫做契约式编程:

在service返回时 加:
Assert.assertNotNull(list);  来强制约束返回值不为null 

契约的缺点就是靠程序员意识,写不写很难控制

spring对契约式编程的支持:
http://jinnianshilongnian.iteye.com/blog/1495594
21 楼 jinnianshilongnian 2012-10-15  
1、在Service层,每次调用doSomething方法时,都实例化一个List,虚拟机都会在堆中为这个list开辟内存,这无疑实在浪费内存和虚拟机的,而且这个list只有在if条件成立时,才需要,如果if不成立,虚拟机还得在方法调用结束后,回收这块内存,这难道不是没事找事吗??

如果服务层 调用 持久层框架(如hibernate) 即使是空 也是返回一个集合的;
                 自己写业务  如果为null  可以返回Collections.EMPTY_LIST(单例 且不可变的) 
建议:不要过早优化 先保证代码可读和可维护



2、在Action层,action不对返回的list做非null判断,这也是一种很恶心的做法,首先,根据面向对象的封装性,Service层中的实现对Action而言,应该是不可见的,Action层应该对其返回值的可能情况做判断,即list!=null必须在Action做,如果后续Service层单独抽出,以API提供Jar包的形式,即我们无法知道里面的具体细节,这时,Action层还得做非空判断。因此,本人觉得,这段代码应该做如下重构

  可以通过如ListUtils.isEmpty(list) 来判断  然后把判断null 和 空的逻辑封装起来;
  另外:如StringUtils等这种工具应该是自己工具箱必备的;

  建议:掌握常用工具箱工具,减少做重复的事情。

20 楼 lazy_ 2012-10-15  
package com.yf.test;

import java.util.ArrayList;
import java.util.List;

public class Service {
	public static List doSomething() {
		List list=null;
		if(xxx){
			list= new ArrayList();
			/*
			 * 此处省略对list的其他操作
			 *  list=.....
			 */			
		}
                if(null == list){
                      return new ArrayList(0);
                }
		return list;
	}
}

19 楼 lazy_ 2012-10-15  
楼主的问题我也在烦恼。从实践的角度看,NULL好容易引起错误。也许就是这个原因,freemarker没有NULL。

1 我编码的时候,尽量不返回NULL。可以return一个new ArrayList(0)或者new HashMap(0),或者"",这就不用担心所谓内存消耗的问题。
2 我用别人写的类,或者好久之前的类,保守起见我肯定会做NULL判断。

引用
容器类型的底层方法应该尽量返回空集,避免返回null。从而避免顶层方法做大量的null判断。具体可参考《Effective Java》。

我没看过Effective Java,但是这句我非常赞成啊,能少写代码就少写代码,简单是王道。其实封装一下
class Util{
  //not null
  public static boolean NN(list){
       if(null != list && !list.empty() ){
              return true;
       }
       return false;
  }
}
也能达到目的。当然这样虽然较少了业务代码,但是会导致公用代码变多了。

相关推荐

    C语言入门经典(第4版)--源代码及课后练习答案

     本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。 内容简介  本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一。本书集综合性、实用性为一体,是学习C语言...

    项目启动文档2

    IRBL项目要求成员在发现问题时能够即时通报,新想法要经过集体讨论并记录在案,任何变更都需要通知到相关人员,以免产生信息不对称导致的项目延误。此外,为了激励团队士气,IRBL项目还设立了一套奖励机制。当项目...

    二十三种设计模式【PDF版】

    件,一段时间下来,发现不过如此,挺简单好用,但是你真正理解 J2EE 了吗?你在具体案例中的应用是否也是在延伸 J2EE 的思 想? 如果你不能很好的延伸 J2EE 的思想,那你岂非是大炮轰蚊子,认识到 J2EE 不是适合...

    (源码)基于C语言的SmartPlugModbus固件项目.zip

    # 基于C语言的SmartPlugModbus固件项目 ## 项目简介 该项目是一个基于C语言的固件项目,旨在实现一个支持Modbus RTU通信协议的智能设备固件。该固件被设计为与SmartPlugModbus设备配合使用,用于控制和管理多个电源插座,提供过流、欠流、过压、欠压和过热保护,同时监控插座状态和电压、电流等参数。 ## 项目的主要特性和功能 1. Modbus RTU通信协议支持固件实现了Modbus RTU通信协议,允许通过Modbus协议与设备进行通信,包括读取和写入设备参数、状态和控制命令。 2. 多插座控制固件支持控制多个电源插座,包括开启、关闭、查询状态等。 3. 保护功能设备提供过流、欠流、过压、欠压和过热保护,防止设备损坏和安全事故。 4. 参数配置通过Modbus协议,用户可以配置设备的保护参数,如电流、电压限制等。

    毕设单片机实战项目基于ESP8266 Mesh SDK开发,通过HSPI与STM32通讯.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕业设计物联网实战项目基于龙芯派的物联网食品仓储监测系统.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    (源码)基于嵌入式系统的StackAttack游戏项目.zip

    # 基于嵌入式系统的StackAttack游戏项目 ## 项目简介 StackAttack是一个基于嵌入式系统的游戏项目,设计用于SPI TFT彩色液晶显示面板上运行。游戏的核心玩法是操控一个名为“Claw”(爪子)的游戏角色,在由格子组成的地图上移动并抓取箱子。玩家通过操纵杆控制游戏角色,成功抓取并移动箱子到目标位置后得分。游戏地图由二维数组表示,每个格子代表一个位置。当玩家成功将所有箱子移动到目标行时,游戏结束。 ## 项目的主要特性和功能 1. 游戏角色控制玩家通过操纵杆控制Claw(爪子)角色移动。 2. 地图和箱子管理游戏地图由二维数组表示,每个格子代表一个位置。箱子在游戏地图上的位置由数组中的值表示。 3. 游戏逻辑包括角色的移动、箱子的抓取和移动、得分计算等。 4. 图形显示使用SPITFTILI9341图形库控制SPI TFT显示屏,实现游戏的图形输出。 5. 暂停功能游戏支持暂停功能,方便玩家随时暂停游戏。

    【嵌入式系统与计算机视觉】基于STM32、OpenCV和CNN的车牌识别系统:社区车辆管理与收费应用

    内容概要:本文档提供了基于STM32、OpenCV和卷积神经网络的车牌识别系统的完整代码示例。系统通过摄像头捕捉视频流,利用OpenCV进行图像处理(如灰度化、二值化、轮廓检测等)以定位车牌区域,并使用预训练的ONNX模型对车牌字符进行识别。之后,系统将识别到的车牌号与预先存储在CSV文件中的居民车牌数据库进行匹配,以判断车辆是否为小区居民所有,从而实现对外来车辆的收费管理。; 适合人群:对嵌入式系统开发、计算机视觉和深度学习感兴趣的开发者,尤其是有一定C++编程基础和技术背景的研究人员或工程师。; 使用场景及目标:①适用于社区、停车场等场所的车辆管理;②帮助开发者理解车牌识别的基本流程,包括图像预处理、车牌定位、字符识别以及与数据库的交互;③提供一个可扩展的基础框架,便于后续优化和功能增加。; 阅读建议:读者应确保具备基本的OpenCV库使用经验和C++编程能力。在学习过程中,建议同时参考相关文献资料,深入理解每个步骤背后的原理,并尝试调整参数或替换模型以提高识别精度。此外,还需准备相应的硬件设备(如摄像头)和软件环境(如安装OpenCV库),以便实际运行代码并观察效果。

    fregefffewfw

    efwfw

    基于S7-200 PLC与MCGS组态的智能交通灯控制系统设计与实现

    内容概要:本文详细介绍了利用西门子S7-200 PLC和MCGS组态软件构建智能交通灯控制系统的方法。首先阐述了系统的硬件配置,包括PLC的选择、IO分配、光电开关的应用等。接着深入探讨了梯形图编程的核心逻辑,如定时器嵌套、车流判断、紧急模式处理等。同时,还讲解了MCGS组态界面的设计要点,如动态指示灯、车流统计曲线、急停按钮等功能的实现。此外,文中分享了一些调试经验和优化技巧,如信号隔离、通信参数设置、夜间模式优化等。 适合人群:对PLC编程和工业自动化感兴趣的工程技术人员、高校相关专业学生。 使用场景及目标:适用于城市交通管理部门进行智能交通灯系统的规划与实施,旨在提高交通效率,减少拥堵。通过学习本文,读者能够掌握PLC编程的基本方法和MCGS组态软件的使用技巧。 其他说明:文中提供了详细的接线图、梯形图代码片段和组态界面截图,便于读者理解和实践。同时,作者还分享了许多实际操作中的注意事项和经验教训,有助于初学者少走弯路。

    毕业设计物联网实战项目基于物联网的气象台站系统.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    VB珠宝首饰店管理系统设计(源代码+系统+开题报告+答辩PPT).zip

    摘 要 面对信息时代的机遇与挑战,利用高科技手段来提高企业的管理水平无疑是一条行之有效的途径。利用计算机管理可以最大限度的发挥准确、快捷、高效等作用, 在越来越激烈的珠宝行业中,计算机管理技术对珠宝首饰公司的服务管理提供强有力的支持。因此,利用全新的计算机网络和珠宝首饰管理系统,已成为提高珠宝首饰公司的管理效率,改进服务水准的重要手段之一。本系统应用Visual Basic 6.0 中文版开发前台,用Microsoft Access 作后台服务器,采用客户机/服务器(C/S)管理思想来对珠宝首饰进销存管理。 关键词:管理水平, 管理效率,服务水准,珠宝首饰管理系统,客户机/服务器,管理思想

    稀疏分解方法在信号去噪中的应用研究_内含源码数据论文.zip

    稀疏分解方法在信号去噪中的应用研究_内含源码数据论文.zip

    2008年领导力发展年度报告

    本书由吉姆·诺埃尔和大卫·多蒂奇编辑,旨在探讨领导力发展领域的最新趋势和实践。书中不仅提供了领导力发展领域的历史回顾,还挑战了组织对领导力发展的战略视角,详细介绍了如何培养全球领导者,并提供了关于领导力发展方法、策略和系统、高潜力人才发展、高层管理参与、有效学习方法以及领导力指标等方面的深入案例研究和理论分析。此外,书中还探讨了创新的领导力发展方法,并对未来的发展趋势进行了展望。

    一种基于 QR 二维码的彩色二维码编码译码设计及其软件实现.zip

    一种基于 QR 二维码的彩色二维码编码译码设计及其软件实现.zip

    毕设单片机实战项目基于机智云和 esp8266-12F WIFI 模块的智能插座控制安卓APP.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    毕业设计物联网实战项目基于mqttd-centos7-v2.3.11.zip 配置的emqtt服务器,配套金大万翔物联网管理平台.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    【光子晶体模拟】基于COMSOL弱形式PDE的三维光子晶体能带结构计算与优化:电磁场切向连续性处理及带隙分析系统设计使用COMSOL

    内容概要:本文详细介绍了使用COMSOL Multiphysics的弱形式接口对三维光子晶体进行数值模拟的方法和技巧。文章通过具体的代码示例,解释了如何构建光子晶体的介电常数分布、设置弱形式PDE、处理电磁场切向连续性、应用Floquet周期边界条件以及特征值求解等关键步骤。特别强调了弱形式接口相比传统物理场接口的优势,如灵活性和对复杂边界的处理能力。文中还分享了一些实用的经验和注意事项,如布洛赫边界条件的实现、特征值求解器参数的优化配置以及网格划分的技巧。 适合人群:具备一定电磁学和数值模拟基础的研究人员或工程师,尤其是对光子晶体仿真感兴趣的读者。 使用场景及目标:①理解并掌握COMSOL弱形式接口在光子晶体仿真中的应用;②学习如何通过弱形式设置处理复杂的电磁场问题;③提高对光子晶体能带结构和带隙特性的认识;④掌握特征值求解和网格划分的最佳实践。 阅读建议:由于本文涉及较多的具体代码和物理概念,建议读者在阅读过程中结合COMSOL软件进行实际操作,同时查阅相关电磁理论书籍以加深理解。此外,对于文中提到的一些具体参数设置和技巧,可以通过尝试不同的配置来巩固所学知识。

    机械工程PT5000汽轮机滑动轴承系统模拟试验台:动态行为与振动控制研究

    内容概要:PT5000汽轮机滑动轴承系统模拟试验台是一个类似于电厂汽轮机发电机的缩小模型,旨在帮助用户获取汽轮机转子动态行为和滑动轴承油膜现象的实际经验,并研究振动控制方法。该试验台模拟两级涡轮机(低压和中压),每级转子两侧各有8个叶片,共计16个叶片。通过电机驱动而非涡轮发电机,可以进行启停机测试,识别共振现象。试验台还支持多种实验,如不平衡/现场动平衡、轴不对中实验、摩擦实验、油膜故障试验、轴颈轴承实验以及根据油压和温度进行的转子动力学试验。试验台配备了多种传感器和控制系统,包括电涡流传感器、温度传感器、压力传感器等,用于监测和记录实验数据。 适合人群:从事汽轮机设计、制造、维护的技术人员,以及相关专业的高校师生和研究人员。 使用场景及目标:①研究汽轮机转子的动态行为和滑动轴承的油膜现象;②进行振动控制方法的研究;③模拟再现油膜涡动转和油膜震荡,研究其控制条件;④进行不平衡、不对中、摩擦等常见故障的模拟和分析;⑤通过调整油压、温度和预加载力,研究轴的行为变化。 其他说明:该试验台不仅适用于教学和科研,还可用于工业领域的培训和技术验证。试验台具有丰富的配置和可选配件,可以根据具体需求进行定制。试验台的机械和电气参数详细列出,确保用户能够全面了解设备性能。

    知识图谱,电影领域,知识图谱构建

    电影类型知识图谱构建,包含相关数据集

Global site tag (gtag.js) - Google Analytics