tag 标签: 项目

相关博文
  • 热度 2
    2016-5-23 10:02
    223 次阅读|
    0 个评论
      课程摘要:         一体化联合作战环境下的武器装备系统,面临着庞大的系统规模和需求不稳定等多重困难,传统的面向过程的结构化系统工程方法已经无法完成对系统的描述,必然要求工程思想和方法学的变革。         美国从上世纪90年代开始研究新的系统工程思想,总结了以C4ISR为代表的复杂军事大系统的多年开发经验,在C4ISR AF V2.0的基础上,美国国防部根据国际系统工程领域的技术进展和美国最近20年来的军事系统研发经验,先后在2004年1月、2007年4月、2009年5月颁布了DoDAF体系结构框架标准V1.0、V1.5、V2.0,作为指导所有军事工程项目研发的系统工程方法论。         针对基于体系的武器装备论证的研究和应用,使得武器装备系统研制过程更加规范、高效和成熟,有效地改善原有工作流程,明显提高武器装备研发的质量与效率。 邀请对象: 航空、航天、兵器、船电等感兴趣的客户 课程时间: 5月26日 周四晚19:00-20:00 课程主题: 一体化武器装备体系论证 讲师介绍:         王晓安,现任恒润科技系统工程部经理,专注于系统工程/软件工程在国防、汽车、轨道交通等领域的咨询和研究。在基于模型的体系工程、系统工程、需求工程、复杂嵌入式研发平台建设等方面拥有丰富的经验,在多个大型系统工程咨询项目中承担过架构咨询师和项目经理。 活动流程: •  19:00-19:40 讲师微信演讲 •  19:40-20:00 自由提问 •  20:00以后  大家自由交流学习。 报名方式: 方式一:点击文章上方“经纬恒润”,关注恒润官方微信公众号,回复“微信号+姓名+单位+联系方式”,微课堂客服号将会添加您的微信,将您拉入本期微信讨论群。 方式二:或经由您认识的恒润技术或销售人员直接拉入本期微信讨论群。 如果您感觉该主题还不错,请帮忙转发给您的好友,参会有惊喜哦! 联系帮助: 电话:010-64840808-5280 邮箱:market_dept@hirain.com
  • 热度 23
    2015-10-19 22:57
    9263 次阅读|
    16 个评论
          曾几何时,也不知到当初自己默默的走向了硬件嵌入式的道路,或者当初的兴趣只在那么一瞬间,而以后的路却很长。 记得是刚上大一那会,隔壁班的班长到处来宿舍宣传,参加机器人了参加机器人了,然后那会可以说很多人在这方面基本上都是渣渣。让自己印象最深刻的是二楼有个同学在这方面基础很扎实,因为他刚来学校的那一年他表哥留给了他很多元器件,价值应该在四位数以上,这里我暂且称他为 A 同学。那会就很羡慕他有如此多的元件,加上他喜欢音乐我也很喜欢所以很自然的成为了朋友,而在后面的年代了,和他在一个团队下面共处,有着一个长达 6 年的友谊。后来我参加了 MCU 的培训,他也是,而且入门比我还早,当初学习的东西都是皮毛,没有一个具体的应用,根本就不能成就什么,这是我们后来的老师的原话! 之后他跟了学习以为硬件很厉害的老师,因为这老师他很多设计上面的事情都亲力亲为,就算哪个电路的电容大了小了也会指出来,甚至自己动手。因为他曾是 DIY 爱好者,家里有很多稀奇古怪的电子设备,也就促使着我们同样也是 DIY 爱好者,特别是 A 同学后面很多事情都是自己在做创业的项目,家里买了个各种大功率音放、示波器、电源等仪器,后面也见证过他在外边接了几个项目。        自己当初并不认识我的导师,无意间要考试了,听班长说有个硬件高频的导师要来讲解下内容,然后自己去听了,也就是那一堂课,我认识了此生对我恩重如山的导师!虽然多年过去,但是自己依旧记忆深刻,那一堂课, 1 班有个学霸不懂的问题上课当众问他,然后自己抢先回答,说你这都不懂吗?然后讲解了自己的见解,这时老师说:“你这小子,不错!”。也许就是这样自己给老师留下了深刻的印象。之后因为同学 A 已经在他手下做事,鉴于和 A 同学关系不过我没有绕弯子,因为那个时候处于人生迷茫期急需有一个德高望重的老师来指点自己前程,直接和 A 同学说让他带我去老师那,其他的我自己说。第二天我就去了他家,同样没有拐弯抹角,他答应以后带我。就这样我成为他的学生!当然同学也要感谢身边众多师兄师姐的帮助,以及所有同学的互助,老师的教诲,学校的支持,都让我们这些年难忘!          在我老师的指导下,我那个时候除了上课只要有半天的时间就会去他家,而他有空就会知道我画原理图, layout ,如何看 PDF 查出最关键的指标参数,如何参考最经典的方案,总之只要是涉及到方案的东西他都会教我,当然我们都很有默契,他那年手下带的学生有 8 个左右,最后都是参加竞赛出身,都做过大大小小的项目。同样因为老师自身本来就喜欢动手,培养的我们当然也是自己喜欢设计出东西的。         带我们的第一个项目是基于原子频标的一个高精度测量频率稳定度的项目。这个项目 A 同学在里面的角色还比较重要,这个项目后面参加了挑战杯,最后由省特推了国二。 A 同学因此在大四时候保研。         当时做的首板,主要的程序量是为很牛的师兄编的。后面参加国赛时候有加强版,当时自己也学了很多类型 MCU 来做控制,而更多的是硬件设计,最初每天都画库,老师给了自己很多库,但是不够所以得自己建。那会自己已经做了很多类型的 opa 、也做过车、做过往届电子竞赛的题目。平时没事就呆在实验室或者遇到问题就去我老师那里,一过就是一年,而那一年遇到自己在以后道路上的搭档同学 B 。他同样有着鲜明的个性,做事绝不拖沓!我们成为搭档也是有说有笑一同好几年,也合作过,同样两个人 DIY 是个什么概念?他写程序我做板子。同学 A 有时来指导指导我们。直到后来参加一个比赛 ------ 起重机的控制系统。主要我和同学 B 负责,做了一款模拟的,还有我老师到我们去现实产地中做过大量的实验。回到学校再改进,再实验。虽然这个创新的项目没有达到我们想要的目的,但是它的影响力让我们更加相信有美好的未来。            在这个项目里面整个团队花的时间还是挺多的,解释下项目 ---- 起重机因为放下物体的那瞬间损耗很多能量,我们做的就是利用超级电容来收集下降的势能而将这些能量存储气起来,等需要耗能的时候再将能量提供出来,以节省总 电源的耗电量。总共效率最后测试的时候能够达到 20%+. 具体的数据不记得。后来多次在现场测量。         下图是我们做的模拟的一个系统,说白了就是简化现场,为了参加比赛给别人做的演示。 同样利用下降的势能收集能量。 箱子里面全部是电路的控制部分。         这个创新项目在市场中的应用是好的,但是最终依旧没有达到我们的目的。而在平时的日常生活中其实自己很少接触这类大功率的东西,说起来自己对于小信号更是情有独钟。而我老师也时常教导我们,没事的时候要多学习,看看书,特备是竞赛类的书籍,这样借鉴别人的才能使自己变得更强,至于其他方面,我会尽自己能力帮你们。所以平时画板子,腐板子,做小东西成了家常便饭。         这是一款纯模拟的板子,期间用了很多高速OPA,用来做选择频率的。         这是腐蚀的一块MSP430的板子,后面这板子能用,用来做控制FFT+数字光感的一个仪器。这个小板子做了一天,最后还在网上开了一块小板子。当时做板子的初衷就是能够多DIY一些东西,没想到结果每几天就做一款板子,做的速度越来越快,这位后面的参加比赛以及加快很多项目提升了进度,也打下了铺垫。         另外还有很重要的一点,我老师也时常提醒我们,有动手能力是不够的,要懂原理,因为没有理论的支撑,再好的动手能力你也就是个焊工!所以!重要的事情说三遍!!!多看书!多看书!多看书!!!   PS: 我的故事虽然微不足道,也许很多人比自己经历过更深刻的事情或者比赛,但是依旧希望很多人在学生年代多接触一些技术上面的事,多看书,少玩游戏,让未来的自己感谢如今的自己。   觉得我写的不过或者有什么需要交流的请留言。另外今晚有点晚,明晚再更新。。。
  • 热度 16
    2015-2-11 09:19
    1127 次阅读|
    1 个评论
    尊敬的客户: 羊年未到,祝福先行。愿亲爱的您在2015年羊年: 生活喜乐羊羊, 工作如羊吃苦, 事业如羊中天, 爱情似羊缠绵。 做人羊眉吐气, 家庭吉羊如意, 心情羊光满面, 健康羊羊得意。 愿您羊年,享羊福喝洋酒开洋荤!     【温馨提示】     为了避免春节假期导致的案件延误,对于正在进行中的项目,请积极配合我们的工作,以便在春节前顺利结案。如有任何新项目测试,请联系我们的业务精英,以便赶在年前准备相关事宜。     我们全体业务和工程人员,会加快项目进度。具体项目进度可以联系各业务代表,谢谢!   北测检测2015年羊年春节假期安排:2月17—25日休假,2月26日(年初八)正常上班。   北测检测全体职员敬上
  • 热度 19
    2014-11-10 14:59
    1376 次阅读|
    4 个评论
            前几天,学弟说他们有在做一个关于逆变器的项目(学生项目不是很复杂),说有个问题困然了几周;然后把他们抓的波形给我看,原来是波型在波峰或者波谷失真的问题。Ps:对于SPWM的产生方法很多也很成熟:可以用用专门的硬件芯片,程序控制也能做的很精确了,选择的算法也很多。        可能也是受到“拿来主义”的影响,在我问了他几个问题中,他都有点模棱两可,此处省略N个字,一步步引导之后确定是软件的原因,给出了他一些验证试验的方法;由于自己有过这些经验之后点出了他们在实验过程中出现的问题,以及思路上的一些不足。         果然第二天问题解决了,他也觉得收获很多,说有种恍然大悟的感觉,看到他们的努力,坚持与进步自己还是觉得很欣慰的。        之后又谈了谈“实验室文化”的延续,给他们提了很多意见,从他们的话语中让我感受到了,只要学到技术就可以了,其他可以都不管,比如实验室不同成员之间衔接,合作,以及氛围的营造,再往后里讲就是氛围的传承等等;这些都让我很吃惊,一直都有这麽一些流传对于很多工程师大家都觉得自己天下第一,喜欢自己一个人单干,觉得这样学到的东西会多,可以说就是死抠技术,并不善于合作以及管理与规划。这些都与我自己认识的有很大的不同,技术应该说只是自己学习过程中的一部分,但不应该是全部。如果太看重技术又会固话思维,如果在学习技术的过程中腾出一些时间来想其他的事,可能又怕自己纳下一些东西没学。所以这样的问题是很矛盾的,但并不是不可解决,在面临这些处境的时候,更应该跳出去思考问题,改善自己的思维与认识。跟他们讲了之后,得到了他们的赞许,也希望他们能将实验室的学习氛围能够一批一批的提高。         对于“拿来主义”对于做项目来说,有利有弊,能在一定程度上推进进度,但是如果单单只“拿”搞出个结果,但是不去梳理清楚过程、原理的话对开发展来说就缺少了思考和提升的过程,想想应该很多工程朋友都有过这个过程。可能是思维定势吧,往往在这种情况下,我们都会选择把思维停在这个层次了,当经过一定积累之后慢慢就会改善很多。只有自己懂了跟多之后,才会想的更全,并在否定与成长的过程中循序渐进,想必这就是学习吧!!!它需要饱满的热情、以及自己的坚持。         想必这些道理大家都懂,只是说大家感悟的深与浅;对于学习三分钟热度是不能够解决的、也没有速成的方法,坚持与天赋都很重要,但是真真需要凭天赋做的也不是我们这种级别能够接触到的。所以能够循序渐进的坚持就好了、能够脚踏实地,不要一味追求“高精尖”,往往自己连基础的都没弄明白——这也算对自己的训诫吧。
  • 热度 23
    2013-12-28 10:27
    2345 次阅读|
    5 个评论
    开发中的新理解——成长在2013 今年在公司里,收获很多。从很多方面,都一个新的认识。因为参与公司的几个项目。有的是维护原有代码,有的是从需求开始,从0做起,有的做了一半,因为调整不做了,有的刚开了个头,因为其他项目需要暂停了。每一个项目,做的程度都不一样。但是每一个项目,都让自己对于完成一个项目,有了更深的认识。也慢慢在改变自己以前那种学校式的研发状态。由一开始想从每一个项目中学习新技术,到想办法确保每一个项目都能按照预期按时结束,做出能够交付的稳定产品。而这本身也是一种学习。   /* ---------------------------------------------------------------------------*/ 年初,公司接到一个项目,给客户提供一套软硬件系统。其中自己负责的部分,需要对一年半前的代码进行维护,修复其中的Bug。对于这份代码由于是一年半前由两个人写就。当维护的时候,第一件事就是怎样读懂代码,找到能入手的地方。当开始研读代码的时候,发现全局变量定义实在是多。一个.c文件中,多的时候就会有二十几个。而代码之间的耦合,造成全局变量的定义和使用可能在几个.c文件中。函数间的参数传递,有些就是直接用全局变量实现的。代码过长的函数,就有好几个,有的函数一个switch就会有200行以上。当时,读到这些代码的时候,第一反应是一定要把这些当时认为不好的代码全部修改了。确实一开始也这样做了,以为只要费些时间就会弄完,然后,有了一个熟悉的代码理解也会更快。   但是一段时间后发现要改的地方真是很多,而且测试起来也很难办。因为是嵌入式上的程序,很多地方都要手动去一个个测试(当时如果知道了《重构》的经验与教训或许不会那么大刀阔斧的来)。测试的过程十分麻烦,而且会造成有些地方测试不到。由于源代码底层代码与应用层代码耦合比较厉害,如果有改动,底层的不稳定会导致整个系统的不稳定。而这个在最后发现了。由于中途临时需要交付一个Release版本,有些地方改了还没有测试,只好将没有测试的地方恢复。这样代码中就出现了改了一半的代码。由于自己在修改的过程中,也没有遵循原有代码的代码风格(由于原有代码tab键与空格混用,看不出风格,变量名也比较随意)。也有些地方遵循自己的编程习惯,修改了代码中存在递归的代码。   最后发现,程序并没有比原来更好理解,耦合性还是很高。在后期考虑到硬件有一个元件已经停产,所以建议更换新的模块。更换后,由于对于新的模块不是十分熟悉,导致出现了比较严重的问题。这个事后自己反思的时候,认为当时提的一个很错误的建议。在项目的后期,已经没有多少时间去测试稳定性了,而此时却将以前稳定的元件替换掉,而换新的元件,测试时间又没有那么多。直接导致了不稳定的存在。事后,也确实因为这个元件,导致了第一批出货出现了返修。为此,连续三个周末在公司解Bug。   整体的维护中,虽然改善了原有代码的的Bug,但是却也引入了新的Bug。在这个过程中,前期也是自己对于代码维护的理解有偏差。如果说重构,也要是用到的地方进行重构,而不是对于很多地方重构。更不应该在项目后期,进行元件的替换。如果说维护是为了保证产品的稳定性,那么就要在最小的范围内做修改。尽量避免修改不需要修改的代码。但是,这里边涉及一个问题,怎么判定那些是需要修改,那些事不需要修改的?有些容易判断,但是有些就十分模糊。   这里还有一点,如果说尽可能减少修改的地方,那么对于维护者而言是否会接受这样的概念?对于一个初做的人,总会想多做一些。是得过且过,还是精益求精?这个或许《重构》最后的一个建议很好“使重构成功的不是前面各种技术,而是这种节奏”,懂得重构是在于“可以自信地停止重构”。但是这种节奏的获得需要有大量的实践才会获得,这种自信也需要从实践中一点点获取。在此次维护结束后,想要找到自己在维护的过程中犯下的错,以期以后不会在同一个坑中栽倒第二次。如何在以后的类似工作中做地更好,在反思了一些以及看了一些书后。认为维护过程中有几点是严重犯错的地方: 没有做到对于不必要的地方不修改; 缺少质量管理的观念。 经过这次维护的经历,得出了以下几点: 确定code style,编写易读性代码,代码可读才会使维护更容易; 使用lint工具检查代码; 积累重构; 注意C的安全性与非安全性; 建立代码质量的观念,建立产品质量的观念;   /* ---------------------------------------------------------------------------*/ 年中,接到另一个项目。和前一个项目完全不一样,这个是要从零开发。自己负责软件中的一部分。初期由自己做设计初步的通信协议,以及通信机制。在开发过程中,发现由于客户不了解元件的特性,推荐的元件型号不满足客户自己的要求。于是,进行了元件更换。在新的元件上,很容易做到客户要求的指标。这些完成后,要给客户提供一批样品进行测试。这个过程中发生了一些意外。试产的第一批在使用测试程序后,发现有一半测试不合格。经过测试分析,发现硬件的模拟部分不同PCBA之间存在差异,原有程序的初始值在差异较多的时候会出现异常。于是将程序的初始值,修改后重新测试发现大部分输出都正常了。   在后来生产的过程中,发现由于实际要装配的东西很多,装配的过程很多,而选择的外壳内部空间较小,造成内部空间很紧张,给装配人员实际造作中带来很**烦。直接的影响就是装配的效率偏低。在催促他们提高装配速度的时候,也确实很难提高速度。测试的项目很多,需要时间。外壳的尺寸和元器件之间内部空间的限制,以及外壳螺丝都成了影响的一个因素(采购的外壳,有些螺丝因为攻丝有问题,导致螺丝装卸较困难)。元件多,要装的步骤会相应多一些。   在这个过程中,反思为什么会出现这样的问题。   首先,软件上的设计一开始没有深入了解具体的硬件情况,导致软件上的参数设置和硬件的偏差配合不上很好。对于具体要应用的场合了解还欠缺深入。在提供给测试部的程序将测试程序与正式程序分开,导致测试人员在测试完成后还要重新烧录正式程序。如果当时,自己在设计程序的时候,将测试流程包含在正式程序中,通过特殊条件触发,能减少测试人员的测试时间,提高他们的速度。同样,在需要的一些测试环节,或许还有可以提高的地方。   其次,选择的外壳和连接线,PCBA之间配合不好。这方面如果考虑多一些,装配人员就能省下来很多时间,提高装配效率。也不会抱怨产品那么难装配。更降低了装配的主动性。   在这个过程中,深深感受到保证每一环正确的重要性,即使有一步缺失都会造成最后产品生产的进度与性能。   /* ---------------------------------------------------------------------------*/ 后来又根据需要接手了两个,由于预期的调整,每一个都做了有一个月左右停下。   /* ---------------------------------------------------------------------------*/ 在这个过程中,慢慢明白了,在一个团队中、在开发产品的工程中最重要的不是技术问题,因为对于一个开发者而言技术通常不是问题。技术可以一点点习得,技术可以google,可以研究,可以向别人请教。而一个开发者通常欠缺的是——建立项目的概念,进行有效沟通。项目进行过程中,每一步都是由有效的沟通驱动。了解需求,团队合作,协同开发,测试反馈,生产反馈……。如果这些过程中,有地方没有明确理解对方表达的意义,或者没有明确表达自己的意思,都会造成整个项目开发上的delay。没有正确了解需求,开发出来的将是一堆无用的代码;没有团队间的有效沟通,开发中成员间将会互相掣肘;没有有效的测试反馈,开发出来的将是质量无法保证的程序;没有生产部门的有效反馈,开发出的有可能是不利于生产的产品。同时建立一个项目管理的概念,也是十分必需。如果将项目广义化,我们工作中接到的每一个任务,对于我们自己而言都是一个项目,我们开发结果的使用放就是我们的客户,而我们自身就要做好对于这个任务的管理。保证给我们的“客户”是高质量的产品,只有每一个环节都有高质量的产出,才会做出最后高质量的产品(产品质量符合木桶理论,注1)。由此而言,作为一个开发者,要关心的不仅仅是技术,也要关心于有效沟通,建立项目管理的观念,将它们用于平时的工作。技术可以保证我们出色完成当前分配好的工作,但是并不能保证我们提供一个高质量的产出,更不能保证项目的顺利完成。所以,技术很重要,但它不是全部。   /* ---------------------------------------------------------------------------*/ 整体而言,这一年在公司经历了很多。从技术,到其他感受也很深,收获也很大。 从一开始想要探究代码,到现在对代码三思而后行; 从一开始想要钻研,到现在工作上enough is good; 从一开始不知何为代码安全,到现在编程时刻将代码安全放在心头; 从一开始不知如何修改代码,到现在试着找找重构的节奏; 从一开始只知开发,到现在从测试、生产、使用的角度考虑设计; 从一开始把代码管理当做备份,到现在建立branches,打tags,查看版本graphic; 从一开始不会lint,到现在用lint工具检查C代码; 从一开始对项目一知半解,到现在慢慢建立项目管理的概念,指导平时的工作; …… 这些的这些,记录了一年的酸甜苦辣,记录了一年的变化。走过,“回首向来萧瑟处,也无风雨也无晴”,留下的是——成长。   /* ---------------------------------------------------------------------------*/ 注: http://forum.eet-cn.com/BLOG_ARTICLE_18255.HTM 关于合作。 http://forum.eet-cn.com/BLOG_ARTICLE_18978.HTM …… http://forum.eet-cn.com/BLOG_ARTICLE_18801.HTM 关于《重构》 http://forum.eet-cn.com/BLOG_ARTICLE_18949.HTM 从实践理解设计 http://forum.eet-cn.com/BLOG_ARTICLE_18775.HTM  
相关资源
  • 所需E币: 0
    时间: 2024-8-26 12:23
    大小: 3.46KB
    上传者: huangyasir1990
    一、什么是流媒体流媒体是一种以流的形式在网络上进行数字媒体(音频、视频)传输的技术。它将频、音视频之类的连续媒体经压缩编码、数据打包后按照一定的时间间隔要求连续地发送给接收方,接收方在后续数据不断到达的同时对接收到的数据进行重组、解码和播放。如果你对流媒体感兴趣的话,可以看一下Live555,一个更流行且更专业的流媒体库。它支持了各种标准流媒体传输协议,如RTP/RTCP、RTSP、SIP,实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持。播放VLC和MPlayer都是基于它来实现流媒体播放的功能,并且非常适合嵌入式领域。二、视频编码 是指压缩编码。在计算机的世界中,一切都是0和1组成的,音视频的数据量庞大,如果按照裸流数据存储的话,那将需要耗费非常大的存储空间,也不利于传送。而音视频中,其实包含了大量0和1的重复数据,因此可以通过一定的算法来压缩这些0和1的数据。特别在视频中,由于画面是逐渐过渡的,因此整个视频中,包含了大量画面/像素的重复,这正好提供了非常大的压缩空间。因此,编码可以大大减小音视频数据的大小,让音视频更容易存储和传送。三、simple-rtmp-server[多种类型直播]一个简单高效的实时视频服务器,使用C++开发,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码、流截图、转发给其他服务器、转封装成HTTP-FLV流、转封装成HLS、转封装成HDS、录制成FLV四、音视频处理框架1.OpenCVOpenCV全称是OpenSourceComputerVisionLibrary,是一个跨平台的计算机视觉库,是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。可用于开发实时的图像处理、计算机视觉以及模式识别程序。OpenCV用C++语言编写,有大量的Python,JavaandMATLAB(版本2.5)的接口。2.GstreamerGStreamer是一个基于管道的多媒体框架,基于GObject,以C语言写成。可以很容易地创建各种多媒体功能组件,包括简单的音频回放,音频和视频播放,录音,流媒体和音频编辑。适用于所有主要操作系统,例如Linux、Android、Windows、MaxOSX、iOS,以及大多数BSD、商业Unix、Solaris和Symbian。GStreamers功能可以通过新插件进行扩展。3.FFmpeg一套开源的音视频处理的框架,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec(用于多个项目中音频和视频的解码器库)以及libavformat(音频与视频格式转换库)五、多媒体处理功能  多媒体视频处理工具FFmpeg有非常强大的功能[1]包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。视频采集功能    FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由FabriceBellard发起的,现在由MichaelNiedermayer主持。    ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。    ffmpeg在Linux下的视频采集    在Linux平台上,ffmpeg对V4L2的视频设备提高了很好的支持,如:    ./ffmpeg-t10-fvideo4linux2-s176*144-r8-i/dev/video0-vcodech263-frtprtp://192.168.1.105:5060>/tmp/ffmpeg.sdp    以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为h263,输出格式为RTP,后面定义了IP地址及端口,将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器就可以实现直播了。六、视频会议传输模块的开发选择视频会议主要是开发音视频、数据的传输的软件,在这些开发过程中,最核心的模块是传输模块,传输模块的性能直接影响到视频会议的最终质量,因此传输模块的选择在视频会议开发当中尤其重要。传输模块在开发过程中,由于考虑到QOS的影响,一般都会使用数据重发的技术,因此传输模块以及成为视频会议底层开发的一个重点,我们开发的传输模块,可以选择用TCP、UDP直接进行开发或者利用开源的传输库,因为一些开源传输库以及比较成熟,直接拿来用就可以,如果自己开发传输模块,估计也是一个巨大工程。现在我们介绍一下传输模块的开发选择。七、商用流媒体软件的选用如果项目在稳定性、安全性和责任约束上比较苛刻,还是建议选用商用产品。商用流媒体服务器软件的选择范围不大,基本上是国内外几家专业的公司在做,可选产品包括:Wowza、AdobeFlashMediaServer和国内NTVMediaServerG3等。Wowza是一个美国WowzaMediaSystems公司的产品,也是目前应用最广泛的一款流媒体服务器产品,在国内也有它的代理商。通过发放软件授权证书进行授权,可以按月、按年度购买使用授权,官网上有明确的报价。国内代理商加上自己的包装和技术支持费用,价格不一。AdobeFlashMediaServer是早些年使用最广泛的一款产品,产品成熟,价格相对高昂,随着Adobe公司退出中国市场,技术支持也主要有一些国内代理商负责。和Wowza一样,由于由国内厂商支持,加上语言、技术能力和时差等问题,在技术支持上并不尽人意。
  • 所需E币: 0
    时间: 2024-5-28 19:38
    大小: 2.46KB
    当下,同城代驾服务越来越受到人们的青睐。为了满足市场需求,许多企业开始开发智能调度系统,以提高服务效率和用户体验。本文将介绍如何搭建一个智能调度系统,并以同城代驾小程序的开发为例进行详细教学。一、技术要求1、平台选择当前主流的平台有iOS和Android,开发者需要根据目标用户的偏好和市场占有率做出选择。同时,还需要考虑平台的开发成本和技术难度等因素。2、功能设计代驾app软件需要具备一些基本功能,如注册登录、订单管理、定位导航等。同时还可以考虑增加一些创新的功能,如在线支付、评价系统等,以提升用户体验和竞争力。3、安全保障代驾服务涉及到用户的个人信息和支付信息,安全性至关重要。在软件开发过程中,需要加强安全保障措施,如数据加密、身份验证等,以保护用户的隐私和安全。二、用户体验1、界面设计代驾app软件的界面设计要简洁明了,符合用户的使用习惯和视觉需求。合理的布局和颜色搭配,清晰的操作流程,能够提升用户的体验和满意度。2、易用性分析代驾app软件开发过程中,应注重易用性的考虑。例如,可以采用简洁明了的图标和按钮,提供明确的操作指引,减少用户的学习成本和操作困难,从而提高用户的使用效率和满意度。3、反馈机制代驾app软件应该提供及时的反馈机制,让用户能够随时了解订单的状态和司机的位置等信息。同时,还应该给用户提供反馈渠道,以便他们及时解决问题和提出建议。三、代驾小程序开发需要多少钱?代驾小程序最终的价格还是要看功能的,越复杂的功能越贵,几千到几万都有。上面推荐给大家的使用智能小程序搭建软件的方法,像上面那个代驾小程序的案例功能这么多的小程序,也就只需要千来块,性价比还是不错的。当然,不满足上面这些功能的老板们,可以选择专业定制,价格几万块但功能会更加全面。四、代驾APP开发有哪些好处1、对于代驾人员来说:代驾APP的开发无疑是为自己增加了客户来源,通过APP代驾人员无须担心车主因为醉酒而无法结算费用的问题。这样既可以保证自己的利益,又能获得更多的客户,不是一举两得吗?2、对于车主而言:代驾APP的到来无疑是为自己的安全带来了保障。让车主可以没有后顾之忧,可以畅饮开怀享受难得的团聚时光。3、对于相关部门来说:代驾APP的到来可以有效地降低交通事故发生率,提高行车安全意识,增强对法律法规的认知,从而更好地构建一个和谐社会。五、代驾app开发,你需要知道的一些技术!一.原生开发什么是原生开发?原生开发(NativeApp开发)就像盖房子,先打地基然后浇地梁、房屋结构、一砖一瓦、钢筋水泥、电路走向等,原生APP同理:通过代码从每个页面、每个功能、每个效果、每个逻辑、每个步骤全部用代码写出来,一层层,一段段全用代码写出来。传统的app是用H5或混合开发,成本不高,但是bug很多,兼容性不好,最直接的体现就是用户进入app十分不流畅,而且有时会发生卡顿、卡页面的现象。二.服务器服务器决定了app在高峰时会不会卡顿,是否流畅,如果服务器的稳定性和承载量不够高,就会出现用户不能良好的刷新页面,无法呼叫代驾,看起来是网络不稳,其实是服务器带不起来。三.长连接即时通讯模式长连接功能指的是代驾司机开展代驾业务时,能够让自己的移动定位实时显示在app界面,用户可以随时查看司机位置,而且都不会出现迟钝、不动的现象。
  • 所需E币: 0
    时间: 2024-5-13 13:48
    大小: 2.29KB
    AIAgent的定义与特点AIAgent是指能够自主地感知环境、进行决策、执行动作,并与环境进行交互的智能体。AIAgent通常具有以下特点:自主性:AIAgent能够独立地进行感知、决策和行动,无需人工干预。目标导向:AIAgent的行为是目标驱动的,其目标可以是完成特定任务、优化特定指标或学习新的知识。适应性:AIAgent能够根据环境的变化调整自己的行为,以适应不同的情况。学习能力:AIAgent能够通过与环境的交互学习新的知识和技能,并不断改进自己的行为。AIAgent在各个领域都有广泛的应用,以下是其中一些应用案例:1.医疗保健:AlAgent可以帮助医生诊断疾病、分析病理切片和制定治疗方案。此外,它们还可以协助护士进行病人监护和记录病历,提高医疗保健的效率和质量。2.金融服务:AlAgent可以帮助银行和保险公司进行风险评估、信用评级和欺诈检测。它们还可以为客户提供个性化的金融咨询服务,提高客户满意度和忠诚度。3.制造业:AlAgent可以帮助工厂自动化生产线进行实时监控、故障诊断和预测性维护。它们还可以协助工程师进行设计和优化生产流程,提高生产效率和产品质量。4.智慧交通:AlAgent可以帮助交通管理部门优化交通流量、降低拥堵和提高交通安全。它们还可以协助驾驶员进行自动驾驶和辅助驾驶,提高道路交通安全性和行车效率。代表性模型:简单反射智能体:行为直接由当前感知决定。具有内部状态的智能体:基于观察历史和当前的感知来决定行动。目标导向智能体:行动旨在实现定义明确的目标。效用基础智能体:评估可能行动的效用,并选择效用最大的行动。分类智能体按照其复杂性和功能可以被分类为:基于规则的智能体:遵循预定义的规则做出反应。学习型智能体:能够从数据中学习并优化其行为。自主智能体:具备一定程度的自我决策能力,能够在没有人类干预的情况下操作。一个精简的Agent决策流程,用函数表达式:Agent:P(感知)—>P(规划)—>A(行动)类似人类「做事情」的过程,Agent的核心功能,可以归纳为三个步骤的循环:感知(Perception)、规划(Planning)和行动(Action)。感知(Perception)是指Agent从环境中收集信息并从中提取相关知识的能力,规划(Planning)是指Agent为了某一目标而作出的决策过程,行动(Action)是指基于环境和规划做出的动作。其中,Policy是Agent做出Action的核心决策,而行动又通过观察(Observation)成为进一步Perception的前提和基础,形成自主地闭环学习过程。这一过程就像马克思主义的「实践论」:“认识从实践开始,经过实践得到了理论的认识,再回到实践中去。”Agent也在知行合一中进化。AgentAI智能体如何实现超进化呢?其实主要是通过机器学习和深度学习等技术实现自我优化和知识积累主要有以下几个方面:一、数据收集与预处理大量数据:智能体需要获取丰富的数据,包括各种场景下的信息。数据清洗:对数据进行清理和预处理,确保数据的质量和准确性。二、模型训练机器学习算法:利用各种机器学习算法,如监督学习、无监督学习等,对数据进行训练。深度学习网络:构建深度神经网络,如卷积神经网络、循环神经网络等,来学习数据中的模式和规律。三、自我优化参数调整:根据训练结果,不断调整模型的参数,以提高性能。超参数优化:通过试验和调整超参数,找到最优的模型配置。
  • 所需E币: 0
    时间: 2024-3-22 14:24
    大小: 1.99KB
    Spring能做什么Spring具有哪些能力呢?这点在Spring的官网上有比较详情的描述,我们可以在Spring的项目里看到Spring的生态涵盖了web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等等SpringBoot优点SpringBoot的优点我可以在https://spring.io/projects/spring-boot这里看到,下面我把优点复制过来了如下:●Createstand-aloneSpringapplications○创建独立Spring应用●EmbedTomcat,JettyorUndertowdirectly(noneedtodeployWARfiles)○内嵌web服务器●Provideopinionated‘starter’dependenciestosimplifyyourbuildconfiguration○自动starter依赖,简化构建配置●AutomaticallyconfigureSpringand3rdpartylibrarieswheneverpossible○自动配置Spring以及第三方功能●Provideproduction-readyfeaturessuchasmetrics,healthchecks,andexternalizedconfiguration○提供生产级别的监控、健康检查及外部化配置●AbsolutelynocodegenerationandnorequirementforXMLconfiguration○无代码生成、无需编写XMLSpringBoot是整合Spring技术栈的一站式框架SpringBoot是简化Spring技术栈的快速开发脚手架在SpringBoot项目中,正常来说是不存在XML配置,这是因为SpringBoot不推荐使用XML,注意,排不支持,SpringBoot推荐开发者使用Java配置来搭建框架,SpringBoot中,大量的自动化配置都是通过Java配置来实现的,这一套实现方案,我们也可以自己做,即自己也可以使用纯Java来搭建一个SSM环境,即在项目中,不存在任何XML配置,包括web.xml。下面我们开始代码实战:创建maven工程引入依赖<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>2.3.4.RELEASE</version>  </parent>  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>  </dependencies>创建主程序/** *主程序类 *@SpringBootApplication:这是一个SpringBoot应用 */@SpringBootApplicationpublicclassMainApplication{  publicstaticvoidmain(String[]args){    SpringApplication.run(MainApplication.class,args);  }}启动类,启动就可以了packagecom.urthink.upfs.springbootdemo; importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplicationpublicclassSpringBootDemoApplication{   publicstaticvoidmain(String[]args){    SpringApplication.run(SpringBootDemoApplication.class,args);  } }我们将这个依赖拷贝到我们自己的项目pom文件里,粘贴后的pom文件如下<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.atguigu</groupId>  <artifactId>boot-01-helloworld</artifactId>  <version>1.0-SNAPSHOT</version>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>2.3.4.RELEASE</version>  </parent><dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>  </dependencies></project>
  • 所需E币: 0
    时间: 2024-3-22 11:17
    大小: 2.63KB
    上传者: 开心就很好了
    SpringBoot一直是开发者比较青睐的一款轻量级框架,他不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。现在很多Java系的软件开发都是基于SpringBoot的,这就要求开发人员都要掌握基于SpringBoot的开发。由于SpringBoot体系非常庞大,导致很多人并不能完全掌握如何使用,尤其是涉及分布式相关的开发时,如何和其他框架整合更是让很多程序员无从下手。在此,我给大家整理了几个优质SpringBoot开源项目给大家参考,希望能够帮助到正在学习SpringBoot的小伙伴!小伙伴简历中不知道写什么项目的或者项目没有亮点的,我只能帮你们到这了!随着技术框架的不断更新,一些公司摒弃了原先的技术框架模式。而springboot慢慢取代了原有的ssm框架开发。为什么选择springboot呢?配置简单不需要编写太多的xml;基于spring构建,容易上手;独立运行不依赖于容器;内置服务器tomcat不需要打war包;提供maven极简配置;对于各种框架有很好的集成;为SpringCloud微服务奠定基础,使微服务构建变得简单;下面让我们使用idea一起搭建完整版的SpringBoot项目:首先,确定项目结构现在后端开发都是基于springboot的web项目,web项目一般都是使用MVC的模式,所以这里也采用类似的模式。在项目maven结构组成上,采用父子项目,也就是一个主项目下有多个子module,分为下面几个,p-admin   p-web--》负责项目启动   p-facade --》控制层,写controller   p-service--》服务层,具体的业务处理   p-dao--》持久化层,负责和数据库打交道   p-common--》公共层,util类\入参、出参等   p-api--》提供给第三方的接口大体的项目结构给出来了,下面看子项目间的依赖关系哈,  p-web依赖于p-service、p-common  p-service依赖于p-dao、p-common  p-api依赖于p-common其他的依赖第三方的库暂时不看,下面再说。接下来就可以进行实际操作创建项目了。接着,创建项目创建父项目(p-admin)这里使用maven的父子项目结构,父项目是这样创建的,在idea中file-->new-->project出现下面的界面,直接next就好一、mallmall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。二、Cloud-Platform(微服务的)Cloud-Platform是国内首个基于SpringCloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用SpringBoot2.1.2以及SpringCloud(Greenwich.RELEASE)相关核心组件,采用Nacos注册和配置中心,集成流量卫兵Sentinel,前端采用vue-element-admin组件。三、微人事微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发,项目加入常见的企业级应用所涉及到的技术点,例如Redis、RabbitMQ等。后端技术栈:SpringBoot、SpringSecurity、MyBatis、MySQL、Redis、RabbitMQ、SpringCache、WebSocket前端技术栈Vue、ElementUI、axios、vue-router、Vuex、WebSocket、vue-cli4四、web-flashweb-flash是一个基于SpringBoot和Vue.js的web系统,包含了基于element搭建的后台管理系统和基于vux搭建的手机端h5站点web-flash具备后台管理类系统的通用的基础功能,而且提供了基于ideaintellij的的代码生成插件,可以一键生成前后端页面。核心框架:SpringBoot数据库层:Springdatajpa数据库连接池:Druid缓存:Ehcache前端:基于Vue.js的Element(后端)和vux(手机端)工作流:activiti
  • 所需E币: 5
    时间: 2024-2-22 15:28
    大小: 747.09KB
    上传者: 小恶魔owo
    CH32V307VCT6四针脚OLED屏幕测试项目吗,包含所需的OLED库文件,项目全开源,供各位学习CH32V307VCT6
  • 所需E币: 0
    时间: 2023-12-21 11:36
    大小: 3.66KB
    一个完整的在线办公系统具备哪些功能:1、线下会议管理功能2、审批会议申请功能3、TRTC在线视频会议功能4、罚款模块5、请假管理6、报销管理那么,如何去开发这样一个在线办公的系统,这样的系统用到哪些技术才能实现?接下来,我将带着大家一步步来开发这样的办公系统。这个项目我用的技术有:SpringBoot2.4.1,SpringMVC5.3.1,MyBatis3.5.7,VUE3.0.3,ElementUIplus1.0.2。第一步,环境搭建数据库mysql我用的是8.0版本,使用Navicat作为MySQL的客户端,大家可以到网上下载Navicat安装文件。另外,强烈建议大家的操作系统要用Win10,不建议大家使用Win7或者Win11系统。安装客户端程序(RedisDesktopManager),如果是MacOS的用户,可以到软件商店中查找免费的Redis客户端软件。MongoDB的客户端,我们使用Navicat就可以,写上正确的连接信息就能连接上MongoDB。我们不需要向MongoDB导入数据,将来使用的过程中,MongoDB会积累业务数据。安装JDK,大家本地的JDK尽量使用1.8+的版本吧安装Maven环境,后端Java项目使用Maven构建,所以大家要在本地建立Maven环境第二步就是最关键的代码实战部分:用上了GROUP_CONCAT()函数,我们的SQL语句变成了下面的样子SELECTu.username,    d.dept_nameASdeptName,( SELECTGROUP_CONCAT(role_nameseparator",") FROMtb_role WHEREJSON_CONTAINS(u.role,CONVERT(id,CHAR)) )ASrolesFROMtb_useruJOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))LEFTJOINtb_deptdONu.dept_id=d.idWHERE r.role_name="超级管理员" 了解过SQL语句的各种语法之后,下面才是我们正式要写的SQL语句。<selectid="searchUserByPage"parameterType="HashMap"resultType="HashMap">  SELECT    DISTINCTu.id,    u.name,    u.sex,    u.tel,    u.email,    d.dept_nameASdept,    u.hiredate,    u.root,    u.status,    (SELECTGROUP_CONCAT(role_nameseparator",")FROMtb_roleWHEREJSON_CONTAINS(u.role,CONVERT(id,CHAR)))ASroles  FROMtb_useru  JOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))  LEFTJOINtb_deptdONu.dept_id=d.id  WHERE1=1  <iftest="name!=null">    ANDu.nameLIKE"%${name}%"  </if>  <iftest="sex!=null">    ANDu.sex=#{sex}  </if>  <iftest="role!=null">    ANDr.role_name=#{role}  </if>  <iftest="deptId!=null">    ANDd.id=#{deptId}  </if>  <iftest="status!=null">    ANDu.status=#{status}  </if>  LIMIT#{start},#{length}</select><selectid="searchUserCount"parameterType="HashMap"resultType="long">  SELECT     COUNT(DISTINCTu.id)  FROMtb_useru  JOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))  WHERE1=1  <iftest="name!=null">    ANDu.nameLIKE"%${name}%"  </if>  <iftest="sex!=null">    ANDu.sex=#{sex}  </if>  <iftest="role!=null">    ANDr.role_name=#{role}  </if>  <iftest="deptId!=null">    ANDu.dept_id=#{deptId}  </if>  <iftest="status!=null">    ANDu.status=#{status}  </if></select>在UserServiceImpl.java类中实现抽象方法。publicclassUserServiceImplimplementsUserService{  ……  @Override  publicPageUtilssearchUserByPage(HashMapparam){    ArrayList<HashMap>list=userDao.searchUserByPage(param);    longcount=userDao.searchUserCount(param);    intstart=(Integer)param.get("start");    intlength=(Integer)param.get("length");    PageUtilspageUtils=newPageUtils(list,count,start,length);    returnpageUtils;  }}在Vue的声明周期回调函数created()中调用了loadRoleList()和loadDeptList()函数,所以可以保证用户管理页面显示的时候,部门列表和角色列表的数据都是从数据库中查询得来的。<el-table  :data="dataList"  border  v-loading="dataListLoading"  @selection-change="selectionChangeHandle"  cell-style="padding:4px0"  style="width:100%;"  size="medium">  <el-table-columntype="selection"header-align="center"align="center"width="50"/>  <el-table-columntype="index"header-align="center"align="center"width="100"label="序号">    <template#default="scope">      <span>{{(pageIndex-1)*pageSize+scope.$index+1}}</span>    </template>  </el-table-column>  <el-table-columnprop="name"header-align="center"align="center"min-width="100"label="姓名"/>  <el-table-columnprop="sex"header-align="center"align="center"min-width="60"label="性别"/>  <el-table-columnprop="tel"header-align="center"align="center"min-width="130"label="电话"/>  <el-table-column    prop="email"    header-align="center"    align="center"    min-width="240"    label="邮箱"    :show-overflow-tooltip="true"  />  <el-table-columnprop="hiredate"header-align="center"align="center"min-width="130"label="入职日期"/>  <el-table-column    prop="roles"    header-align="center"    align="center"    min-width="150"    label="角色"    :show-overflow-tooltip="true"  />  <el-table-columnprop="dept"header-align="center"align="center"min-width="120"label="部门"/>  <el-table-columnprop="status"header-align="center"align="center"min-width="100"label="状态"/>  <el-table-columnheader-align="center"align="center"width="150"label="操作">    <template#default="scope">      <el-button        type="text"        size="medium"        v-if="isAuth(['ROOT','USER:UPDATE'])"        @click="updateHandle(scope.row.id)"      >        修改      </el-button>      <el-button        type="text"        size="medium"        v-if="isAuth(['ROOT','USER:UPDATE'])"        :disabled="scope.row.status=='离职'||scope.row.root"        @click="dimissHandle(scope.row.id)"      >        离职      </el-button>      <el-button        type="text"        size="medium"        :disabled="scope.row.root"        v-if="isAuth(['ROOT','USER:DELETE'])"        @click="deleteHandle(scope.row.id)"      >        删除      </el-button>    </template>  </el-table-column></el-table>在TbRoleDao.xml文件中,定义SQL用于查询角色分页数据。看上面的截图可知,在角色管理页面上,只有按照角色名字模糊查询。所以在SQL语句中,WHERE子句里面只有一个查询条件。由于在页面表格中要显示每个角色拥有的权限数量,而且tb_role表的permissions字段是JSON数组格式,所以我们统计数组的元素数量,就是该角色拥有的权限数量。恰好JSON_LENGTH()函数能获取JSON数组的长度,所以我就用在SQL语句中了。@Data@Schema(description="查询角色分页表单")publicclassSearchRoleByPageForm{  @Pattern(regexp="^[0-9a-zA-Z\\u4e00-\\u9fa5]{1,10}$",message="roleName内容不正确")  @Schema(description="角色名称")  privateStringroleName;  @NotNull(message="page不能为空")  @Min(value=1,message="page不能小于1")  @Schema(description="页数")  privateIntegerpage;  @NotNull(message="length不能为空")  @Range(min=10,max=50,message="length必须在10~50之间")  @Schema(description="每页记录数")  privateIntegerlength;}在TbDeptDao.xml文件中,定义SQL用于查询部门分页数据。看上面的截图可知,在部门管理页面上,只有按照部门名字模糊查询。所以在SQL语句中,WHERE子句里面只有一个查询条件。由于在页面表格中要显示每个部门拥有的员工数量,所以用了COUNT()汇总函数。publicclassDeptServiceImplimplementsDeptService{  ……  @Override  publicPageUtilssearchDeptByPage(HashMapparam){    ArrayList<HashMap>list=deptDao.searchDeptByPage(param);    longcount=deptDao.searchDeptCount(param);    intstart=(Integer)param.get("start");    intlength=(Integer)param.get("length");    PageUtilspageUtils=newPageUtils(list,count,start,length);    returnpageUtils;  }}在DeptController.java类中,定义Web方法,然后大家就可以在Swagger页面测试Web方法了。publicclassDeptController{……  @PostMapping("/searchDeptByPage")  @Operation(summary="查询部门分页数据")  @SaCheckPermission(value={"ROOT","DEPT:SELECT"},mode=SaMode.OR)  publicRsearchDeptByPage(@Valid@RequestBodySearchDeptByPageFormform){    intpage=form.getPage();    intlength=form.getLength();    intstart=(page-1)*length;    HashMapparam=JSONUtil.parse(form).toBean(HashMap.class);    param.put("start",start);    PageUtilspageUtils=deptService.searchDeptByPage(param);    returnR.ok().put("page",pageUtils);  }}本文到此告一段落,感谢大家的观看!
  • 所需E币: 0
    时间: 2023-12-18 10:38
    大小: 3.46KB
    上传者: 开心就很好了
    今天给大家讲讲关于SpringBoot2仿B站的一个项目,大家都知道,如今短视频成为了风口中的风口,但市场上极度缺乏视频业务开发的相关技术人才。本文将结合SpringCloud微服务架构+Springboot+JDK+Maven+VUE等技术,实现B站核心功能(视频流、弹幕流)+百万量级的高性能优化,从而帮助大家提升前端加后端技术水平,掌握架构设计思维及丰富解决方案。实现步骤使用Vue3提供的Provide/Inject组合,通过provide在App.vue中提供当前语言环境localeLanguage,代码片段如下所示://App.vue  <scriptsetuplang="ts">  importzhCnfrom'element-plus/lib/locale/lang/zh-cn'  importenfrom'element-plus/lib/locale/lang/en'  import{ref,provide}from'vue'  //显示引入provide    constlocale=ref(zhCn)  constlocaleLanguage=ref('')  functionchangeLang(language:any){   locale.value=language   localeLanguage.value=language.name  }    //提供当前语言环境localeLanguage  provide('localeLanguage',localeLanguage)    </script>然后再通过inject将其注入到home页面,将获取到的localeLanguage传入自定义的t函数中,代码片段如下所示://home/index.vue  <scriptsetuplang="ts">  import{useRoute}from'vue-router'  import{inject}from'vue' //显示引入inject  import{t}from'../../utils/internationalization'    //通过inject将localeLanguage注入,作为t函数的参数  constlocaleLanguage:string=inject('localeLanguage')||''  constroute=useRoute()  console.log(route.params)  constvalue1=''  </script>    <template>   <div>{{t(localeLanguage).home}}---{{t(localeLanguage).mine}}</div>   <el-date-pickerv-model="value1"type="date"placeholder="Pickaday"></el-date-picker>  </template>封装一个openStore(),使用indexedDB.open()方法返回一个IDBRequest对象,接着将这个对象上的三个事件分别放置进入:onsuccess、onerror、onupgradeneeded。onsuccess表示打开数据库成功的事件。onerror表示打开数据库失败的事件。onupgradeneeded是数据库升级事件,如果版本号更新,并且大于之前的版本号则进行数据库升级,该事件回调里面,会创建我们所需要的对象仓库,类似于关系型数据库中的表的概念。exportdefaultclassDB{ privatedbName:string//数据库名称 constructor(dbName:string){  this.dbName=dbName } //打开数据库 publicopenStore(storeName:string,keyPath:string,indexs?:Array<string>){  constrequest=window.indexedDB.open(this.dbName,2)  request.onsuccess=(event)=>{   console.log('数据库打开成功')   console.log(event)  }  request.onerror=(event)=>{   console.log('数据库打开失败')   console.log(event)  }  request.onupgradeneeded=(event)=>{   console.log('数据库升级成功')   const{result}:any=event.target   conststore=result.createObjectStore(storeName,{autoIncrement:true,keyPath})   if(indexs&&indexs.length>0){    indexs.map((v:string)=>{     store.createIndex(v,v,{unique:true})    })   }   store.transaction.oncomplete=(event:any)=>{    console.log('创建对象仓库成功')   }   console.log(event)  } }}Promise包装异步事务为了更好的获取indexedD事务中的返回结果,我们使用promise来包装一下上一小节indexedDB.ts中定义的几个方法:openStore、updateItem、deleteItem、getList、getItem。下面代码片段为getList() //查询所有数据 getList(storeName:string){  conststore=this.db.transaction(storeName).objectStore(storeName)  constrequest=store.getAll()  returnnewPromise((resolve,reject)=>{   request.onsuccess=(event:any)=>{    console.log('查询所有数据成功')    console.log(event.target.result)    resolve(event.target.result)   }   request.onerror=(event:any)=>{    console.log('查询所有数据失败')    console.log(event)    reject(event)   }  }) }使用@include指令来引入定义好的样式函数,该函数的三个参数可以根据传入的值来对flex布局进行自定义,默认值为:column、center、right,在footerCommon.scss中我们重新自定义了该样式函数,分别传入row、space-between、flex-start,代码片段如下://footerCommon.scss.common-footer{  border-top:1pxsolidrgb(235,235,235); .footer{  @includemain-wrapper;  @includelayout(row,space-between,flex-start);  padding:20px0;  li{   @includelayout;   h4{    font-weight:bold;   }   a{    margin-bottom:10px;    color:rgb(72,72,72);    text-decoration:none;    &:hover{     text-decoration:underline;    }   }  } }}getter类似与Vue中的computed计算属性,它的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算getters里可以处理一些array、object的查询、过滤、遍历、重构或者做一些字符拼接的操作,方便直接生成一些可以直接使用的数据。如下代码片段展示了如何在getter中进行过滤查询:exportconststore=createStore({   state:{   todos:[  //定义一个对象数组   {   id:1,   done:true   },   {   id:2,   done:false   }   ]   }   getters:{   doneTodosCount(){ //查询已完成的个数   returnstore.state.todos.filter(todo=>todo.done).length //返回值:1   }   }  })通过环境变量区分server.js中的一些代码片段,因为有些代码需要运行在开发环境,而有些代码需要运行在生产环境。本小节在server.js中一共对3个地方进行了环境区分,代码片段如下//server.jsif(!isProd){ //1.读取index.html template=fs.readFileSync(  path.resolve(__dirname,'index.html'),  'utf-8' ) //2.应用ViteHTML转换。这将会注入ViteHMR客户端, //  同时也会从Vite插件应用HTML转换。 //  例如:@vitejs/plugin-react-refresh中的globalpreambles template=awaitvite.transformIndexHtml(url,template) //3.加载服务器入口。vite.ssrLoadModule将自动转换 //  你的ESM源码使之可以在Node.js中运行!无需打包 //  并提供类似HMR的根据情况随时失效。 render=(awaitvite.ssrLoadModule('/src/entry-server.ts')).render}else{ //1.读取index.html template=fs.readFileSync(  path.resolve(__dirname,'dist/client/index.html'),  'utf-8' ) //3.加载服务器入口 render=require('./dist/server/entry-server.ts').render}
  • 所需E币: 0
    时间: 2023-12-12 15:27
    大小: 3.18KB
    上传者: 开心就很好了
    今天给大家讲解关于Qt的内容,我会在文章里面带着大家从0到1为你系统构建Qt知识体系,然后全流程实战开发项目“云对象存储浏览器”,让大家少走弯路,更快速的掌握Qt技术。那么我们先来认识一下,什么是QT,他的具体作用是什么,应用在哪些方面?Qt是一个1991年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。QT之所以能够在全世界范围内得到广大软件开发者的青睐和使用,一个很大的原因是QT入门确实是非常容易。很少的代码就能折腾出一个比较复杂的软件界面。QT已经支持传统模式下的软件界面开发技术体系以及新模式下的软件界面开发技术体系。传统模式比如QTWidgets,这种模式下的竞争对手比如MFC早就“躺平”了表示不再升级更新了。接下来,我们开始代码实战,编写mainwindows.cppMainWindow::MainWindow(QWidget*parent)  :QMainWindow(parent)  ,ui(newUi::MainWindow){  ui->setupUi(this);  //一般在qt的构造函数中进行初始化操作  //显示当前窗口的时候,显示另外一个窗口TestWidget#if1  //创建窗口对象,没有给W对象指定父对象  //要显示这个窗口必须要进行show()操作  TestWidget*w=newTestWidget;  w->show();#else  //创建窗口对象,给W对象指定父对象  //explicitTestWidget(QWidget*parent=nullptr);  //如果创建一个窗口对象的时候给其指定了父对象,这个窗口就不是一个独立窗口  //这样的话当前父窗口显示的时候,子窗口就一并被显示出来了  //这时候子窗口是没有边框的  TestWidget*w=newTestWidget(this);#endif  //创建对话框窗口  Dialog*dlg=newDialog();  //非模态  dlg->show();}#include"mainwindow.h"#include"ui_mainwindow.h"#include"testwidget.h"MainWindow::MainWindow(QWidget*parent)  :QMainWindow(parent)  ,ui(newUi::MainWindow){  ui->setupUi(this);     //一般在qt的构造函数中进行初始化操作  //显示当前窗口的时候,显示另外一个窗口TestWidget  //创建窗口对象,没有给W对象指定父对象  TestWidget*w=newTestWidget;  w->show();}MainWindow::~MainWindow(){  deleteui;}获取类的属性constQMetaObject*metaobject=object->metaObject();intcount=metaobject->propertyCount();for(inti=0;i<count;++i){  QMetaPropertymetaproperty=metaobject->property(i);  constchar*name=metaproperty.name();  QVariantvalue=object->property(name);  qDebug()<<name<<value;}在common中引入的坐标依赖<dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-lang3</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-core</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-annotations</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-databind</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.datatype</groupId>  <artifactId>jackson-datatype-jsr310</artifactId></dependency>迭代查询代码,一级缓存与二级缓存结合:@GetMapping("query")publicObjectquery(Stringid){  StringarticleKey="article:"+id;  StringarticleKeyRedis="REDIS_ARTICLE:"+id;  Articlearticle=cache.get(articleKey,s->{    System.out.println("文章id为"+id+"的没有查询到,则从Redis中查询后返回...");    ArticlearticleReal=null;    StringarticleJsonStr=redis.get(articleKeyRedis);    //判断从redis中查询到的文章数据是否为空    if(StringUtils.isBlank(articleJsonStr)){      System.out.println("Redis中不存在该文章,将从数据库中查询...");      //如果为空,则进入本条件,则从数据库中查询数据      articleReal=articleService.queryArticleDetail(id);      //手动把文章数据设置到redis中,后续再次查询则有值      StringarticleJson=JsonUtils.objectToJson(articleReal);      redis.set(articleKeyRedis,articleJson);    }else{      System.out.println("Redis中存在该文章,将直接返回...");      //如果不为空,则直接转换json类型article再返回即可      articleReal=JsonUtils.jsonToPojo(articleJsonStr,Article.class);    }    returnarticleReal;  });  returnarticle;}@ResourceprivateIArticleTypeServicearticleTypeService;@ResourceprivateCache<String,List<ArticleType>>articleTypeCache;@ResourceprivateRedisOperatorredis;@Overridepublicvoidrun(String...args)throwsException{  System.out.println("缓存预热。。。");  //1.查询所有分类数据  List<ArticleType>types=articleTypeService.list();  System.out.println(types);  StringarticleTypeKey="articleTypeList";  //2.设置分类数据到本地缓存  articleTypeCache.put(articleTypeKey,types);  //3.设置分类数据到redis  redis.set(articleTypeKey,JsonUtils.objectToJson(types));}修改hostname,可以区分每个tab是哪台虚拟机--获得http的协议版本号--ngx.say("http协议版本:"..ngx.req.http_version());--获得http的请求方法--ngx.say("http的请求method:"..ngx.req.get_method());--http的请求头内容--ngx.say("http的原始请求头内容:"..ngx.req.raw_header());--获得http的请求头信息localmyHeader=ngx.req.get_headers();--ngx.say("token:"..myHeader.token);--ngx.say("uid:"..myHeader.uid);--获得请求中的参数localargs=ngx.req.get_uri_args();--ngx.say("age:"..args["age"]);--ngx.say("birthday:"..args["birthday"]);--获得请求体body中的数据ngx.req.read_body();localbody_data=ngx.req.get_post_args();forkey,valueinpairs(body_data)do  ngx.say(key,value);end目标:先查询缓存,如果缓存有数据,则在网关中判断返回即可。如果网关中缓存不存在,则把请求向后端服务转发。--导入工具类引用localhttp=require('http');localredis=require("redis_utils")localget=http.get;localargs=ngx.req.get_uri_args();localarticleId=args["id"];localarticleKey="REDIS_ARTICLE:"..articleId;localarticleDetail=redis.get(articleKey);ifarticleDetail~=ngx.nullthen  ngx.say("byopenresty:"..articleDetail);  return;end--发送请求localresult=get("/article/query",args);--返回响应ngx.say("byspringboot:"..result);--ngx.say("测试负载均衡-106");
  • 所需E币: 0
    时间: 2023-9-20 16:11
    大小: 1.29KB
    上传者: 蝴蝶结欧恩
    给大家分享一套课程——Vue+DjangoRESTframework打造生鲜电商项目,附源码下载。Django项目源自一个在线新闻Web站点,于2005年以开源的形式被释放出来。Django框架的核心组件有:用于创建模型的对象关系映射;为最终用户设计较好的管理界面;URL设计;设计者友好的模板语言;缓存系统。Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。微商等社交电商社交电商将成为未来零售的重要通道,社交电商所带来的巨大流量也将转变为电商的销量,人们在获取信息的同时还可以更好的享受购物带来的乐趣,社交电商将成为未来电商发展的新方向。网站开发,网页设计,网络营,微商,开淘宝或者京东网店,还有就是做代购,这些都是电子商务方面的创业项目。随着国内互联网使用人数的增加,利用互联网进行网络购物并以银行卡付款的消费方式已渐趋流行,市场份额也在迅速增长,各种类型的电商网站也将层出不穷。注:找项目,找渠道,找异业合作建议上BD邦平台看看,有很多甲方项目能给予启发,还有行业社群
  • 所需E币: 0
    时间: 2023-9-20 08:49
    大小: 1.09KB
    上传者: huangyasir1990
    2023版全新高质量商业级小程序全栈项目实战,前端小程序开发主要有原生开发、第三方框架开发、H5网页封装三种,从性能及体验上来看,原生开发>第三方框架>H5封装。H5封装也就是把H5网页封装在小程序内,开发成本低,但是体验不太好、性能也不太好,大部分小程序功能无法使用;第三方框架开发小程序都主要目的是为了一次编写多端运行,然而实际上,使用第三方框架开发小程序会有很多兼容性需要去做处理,很多坑需要去踩,有时候开发成本反而比原生开发更高;原生开发实际上就是按照小程序官方文档中的描述去开发小程序,体验和性能是最好的。2023版全新高质量商业级小程序全栈项目实战(完结22章),开发小程序需要用到哪些技术:1、前端技术小程序的界面和交互都是通过前端技术实现的,包括HTML、CSS、JavaScript等。你需要熟练掌握这些技术,特别是JavaScript,因为小程序使用的是一种叫做“微信小程序框架”的JavaScript框架。2、后端技术小程序需要与后端服务器进行数据交互,所以需要熟悉后端技术,如Node.js、PHP、Python等。3、数据库技术小程序需要使用数据库存储数据,如MySQL、MongoDB等。4、微信小程序开发工具微信提供了一款小程序开发工具,它可以提供代码编辑、调试、预览和发布等功能。
  • 所需E币: 2
    时间: 2023-7-26 16:53
    大小: 289.41KB
    上传者: 张红川
    第2季:51单片机高级外设和项目篇.rar
  • 所需E币: 1
    时间: 2023-7-12 09:19
    大小: 2.73MB
    上传者: 张红川
    最终项目代码.zip
  • 所需E币: 1
    时间: 2023-7-12 09:19
    大小: 2.44MB
    上传者: 张红川
    项目讲义.zip。。。。。。。。。。。
  • 所需E币: 1
    时间: 2023-7-12 09:15
    大小: 318.05KB
    上传者: 张红川
    day5-项目概述.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:39
    大小: 551.15KB
    上传者: 张红川
    day09-串口类和项目.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:28
    大小: 178.68KB
    上传者: 张红川
    12项目阶段2.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:28
    大小: 620.49KB
    上传者: 张红川
    13项目中遇到的问题.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:30
    大小: 97.44KB
    上传者: 张红川
    06项目要求.pdf
  • 所需E币: 1
    时间: 2023-7-10 16:16
    大小: 164.57KB
    上传者: 张红川
    项目一.pdf。。。。