流媒体开发之--HLS--M3U8解析(1)

最近业余时间跟朋友要搞一个流媒体直播app,所以这段时间搜集一些资料,然后整理下来,同时有时也会将一些遇到的问题的解决方案记录下来,--因为分享,技术无处不在!首先这一章来讲解一下m3u8文件的格式,以及里面的内容含义。
一、概念
1. Playlist file
    一个M3U的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分。每一行可以是一个URI  空白行或
是以”#“号开头的字符串,并且空格只能存在于一行中不同元素间的分隔。
   一个URI 表示一个媒体段或是”variant Playlist file“(最多支持一层嵌套,即一个mm3u8文件中嵌套另一个m3u8),
以”#EXT“开头的表示一个”tag“,否则表示注释,直接忽略
2. Tags
    #EXTM3U:  每个M3U文件第一行必须是这个tag。
    #EXTINF:指定每个媒体段(ts)的持续时间,这个仅对其后面的URI有效,每两个媒体段URI间被这个tag分隔开,其格式如下:
                     #EXTINF:,  :<br>   duration表示持续的时间(秒)”Durations MUST be integers if the protocol version of the Playlist file is less</p> <p>than 3“,否则可以是浮点数。<br>     #EXT-X-BYTERANGE:表示媒体段是一个媒体URI资源中的一段,只对其后的media URI有效,格式如下:<br>                      #EXT-X-BYTERANGE:<n>[@o]:<br>   其中n表示这个区间的大小,o表在URI中的offset;”The EXT-X-BYTERANGE tag appeared in version 4 of the protocol“。<br>     #EXT-X-TARGETDURATION:指定最大的媒体段时间长(秒)。所以#EXTINF中指定的时间长度必须小于或是等于这个最大<br> 值。这个tag在整个PlayList文件中只能出现一 次(在嵌套的情况下,一般有真正ts url的m3u8才会出现该tag)。格式如下:<br>                      #EXT-X-TARGETDURATION:<s>:s表示最大的秒数。</p> <p>    #EXT-X-MEDIA-SEQUENCE:每一个media URI 在 PlayList中只有唯一的序号,相邻之间序号+1。<br>                      #EXT-X-MEDIA-SEQUENCE:<number>:<br>                     一个media URI并不是必须要包含的,如果没有,默认为0。<br>     #EXT-X-KEY:表示怎么对media segments进行解码。其作用范围是下次该tag出现前的所有media URI,格式如下:<br>                      #EXT-X-KEY:<attribute-list>:<br>                     NONE 或者 AES-128。如果是NONE,则URI以及IV属性必须不存在,如果是AES-128(Advanced Encryption</p> <p>                    Standard),则URI必须存在,IV可以不存在。<br>                     对于AES-128的情况,keytag和URI属性共同表示了一个key文件,通过URI可以获得这个key,如果没有<br>                     IV(Initialization Vector),则使用序列号作为IV进行编解码,将序列号的高位赋到16个字节的buffer中,左边补0;如果<br>                     有IV,则将改值当成16个字节的16进制数。</p> <p><br>     #EXT-X-PROGRAM-DATE-TIME:将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,只对下一个meida URI有效,格式如下:<br>                      #EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ><br>                      For example:<br>                      #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00<br>    #EXT-X-ALLOW-CACHE:是否允许做cache,这个可以在PlayList文件中任意地方出现,并且最多出现一次,作用效果是所有的媒体段。格式如下:<br>                      #EXT-X-ALLOW-CACHE:<YES|NO><br>    #EXT-X-PLAYLIST-TYPE: 提供关于PlayList的可变性的信息, 这个对整个PlayList文件有效,是可选的,格式如下:<br>                      #EXT-X-PLAYLIST-TYPE:<EVENT|VOD> :如果是VOD,则服务器不能改变PlayList 文件;如果是EVENT,则<br> 服务器不能改变或是删除PlayList文件中的任何部分,但是可以向该文件中增加新的一行内容。<br>    #EXT-X-ENDLIST:表示PlayList的末尾了,它可以在PlayList中任意位置出现,但是只能出现一个,格式如下:<br>                      #EXT-X-ENDLIST<br>    #EXT-X-MEDIA:被用来在PlayList中表示相同内容的不用语种/译文的版本,比如可以通过使用3个这种tag表示3中不用语音的音<br> 频,或者用2个这个tag表示不同角度的video在PlayLists中。这个标签是独立存在的,其格式如下:<br>                     #EXT-X-MEDIA:<attribute-list>:该属性列表中包含:URI、TYPE、GROUP-ID、LANGUAGE、NAME、DEFAULT、AUTOSELECT。<br>                     URI:如果没有,则表示这个tag描述的可选择版本在主PlayList的EXT-X-STREAM-INF中存在;<br>                     TYPE:AUDIO and VIDEO;<br>                     GROUP-ID:具有相同ID的MEDIAtag,组成一组样式;<br>                     LANGUAGE:identifies the primary language used in the rendition。<br>                     NAME:The value is a quoted-string containing a human-readable description of the rendition. If the LANGUAGE attribute is present then this description SHOULD be in that language。<br>                     DEFAULT: YES或是NO,默认是No,如果是YES,则客户端会以这种选项来播放,除非用户自己进行选择。<br>                     AUTOSELECT:YES或是NO,默认是No,如果是YES,则客户端会根据当前播放环境来进行选择(用户没有根据自己偏好进行选择的前提下)。<br>         The EXT-X-MEDIA tag appeared in version 4 of the protocol。<br> o All EXT-X-MEDIA tags in the same group MUST have the same TYPE<br> attribute.<br> o All EXT-X-MEDIA tags in the same group MUST have different NAME<br> attributes.<br> o A group MUST NOT have more than one member with a DEFAULT<br> attribute of YES.<br> o All members of a group whose AUTOSELECT attribute has a value of<br> YES MUST have LANGUAGE [RFC5646] attributes with unique values.<br> o All members of a group with TYPE=AUDIO MUST use the same audio<br> sample format.<br> o All members of a group with TYPE=VIDEO MUST use the same video<br> sample format。</p> <p><br>   #EXT-X-STREAM-INF:指定一个包含多媒体信息的 media URI 作为PlayList,一般做M3U8的嵌套使用,它只对紧跟后面的URI有<br> 效,格式如下:<br> #EXT-X-STREAM-INF:<attribute-list><br> <URI><br> 有以下属性:<br> BANDWIDTH:带宽,必须有。<br> PROGRAM-ID:该值是一个十进制整数,惟一地标识一个在PlayList文件范围内的特定的描述。一个PlayList 文件中可<br> 能包含多个有相同ID的此tag。<br> CODECS:不是必须的。<br> RESOLUTION:分辨率。<br> AUDIO:这个值必须和AUDIO类别的“EXT-X-MEDIA”标签中“GROUP-ID”属性值相匹配。<br> VIDEO:同上</p> <p><br> m3u8的组成格式有多种,下面给出一个实例,http://ipadlive.cntv.soooner.com/cctv_p2p_hdcctv2.m3u8这个是CCTV-2财经的一个源,内容如下<br> #EXTM3U<br> #EXT-X-ALLOW-CACHE:NO<br> #EXT-X-TARGETDURATION:10<br> #EXT-X-MEDIA-SEQUENCE:8453235<br> #EXTINF:19,<br>http://124.232.164.44:80/ipad/160_15601_4572/20130804075250.ts?userid=VSNDNP-183061027101_160_15601_4572<br> #EXTINF:2,<br>http://124.232.164.44:80/ipad/160_15601_4572/20130804075300.ts?userid=VSNDNP-183061027101_160_15601_4572<br> #EXTINF:10,<br>http://124.232.164.44:80/ipad/160_15601_4572/20130804075310.ts?userid=VSNDNP-183061027101_160_15601_4572</p> <p>如果是这种的话,就很方便其中http一行就是完整的一个链接,否则还要进行拼接。<br> 下一章会给出一个HLS的一个中文版的草案</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1275459191292575744"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(android,流媒体开发,android直播开发)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1942039999184695296.htm" title="Entity Framework 实体数据模型入门:从创建到实战应用" target="_blank">Entity Framework 实体数据模型入门:从创建到实战应用</a> <span class="text-muted">Leon@Lee</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>EntityFramework(简称EF)作为.NET平台下的ORM(对象关系映射)框架,极大地简化了数据库操作。本文将由浅入深,带您一步步了解EF实体数据模型的创建、配置、开发与使用,即使是新手也能快速上手。一、EF与ADO.NET:为何选择EF?在介绍EF之前,我们先看看传统的数据访问方式与EF的区别:ADO.NET的局限:直接编写SQL语句操作数据库,需要手动处理类型转换、SQL拼接等问题,</div> </li> <li><a href="/article/1942039369175068672.htm" title="Unreal Engine开发:高级渲染技术_4.高级着色器编程" target="_blank">Unreal Engine开发:高级渲染技术_4.高级着色器编程</a> <span class="text-muted">chenlz2007</span> <a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E5%BC%80%E5%8F%91/1.htm">游戏开发</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E5%B9%BB/1.htm">虚幻</a><a class="tag" taget="_blank" href="/search/%E7%9D%80%E8%89%B2%E5%99%A8/1.htm">着色器</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E5%BC%95%E6%93%8E/1.htm">游戏引擎</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/rpc/1.htm">rpc</a> <div>4.高级着色器编程在上一节中,我们探讨了UnrealEngine中的基础渲染技术,包括光照、阴影和材质系统。本节将深入探讨高级着色器编程,帮助您掌握更复杂的渲染效果和优化技术。UnrealEngine的着色器系统是基于HLSL(High-LevelShadingLanguage)和USF(UnrealShaderFormat)的,这两种语言允许开发者编写高效的着色器代码,以实现各种视觉效果。4.1</div> </li> <li><a href="/article/1942038738452410368.htm" title="使用webpack.ProvidePlugin配置全局api" target="_blank">使用webpack.ProvidePlugin配置全局api</a> <span class="text-muted"></span> <div>在使用vue开发过程中,基本每个组件都需要import引入api接口,用webpack配置ProvidePlugin后,将不用再引入api,直接使用就可以。配置方法:1、在webpack.dev.conf.js和webpack.prod.conf.js中添加plugins:[...newwebpack.ProvidePlugin({'api':'api'})...]2、在webpack.base.</div> </li> <li><a href="/article/1942037226414206976.htm" title="常见构建工具使用与原理浅析" target="_blank">常见构建工具使用与原理浅析</a> <span class="text-muted"></span> <div>1.初版构建工具1.1.GruntGrunt是前端第一个正式的构建工具,它基于Node.js开发。Grunt同样是基于插件实现功能拓展增强,但对于像Webpack上很多能力,如HMR、ScopeHoisting等都是不支持的,可以作为学习Webpack前的了解。Grunt更像是一种自动化的配置工具集,就如官方所说,Grunt是TheJavaScriptTaskRunner,每个Grunt任务通常必</div> </li> <li><a href="/article/1942037100006273024.htm" title="在项目架构时,如何选择打包构建工具?" target="_blank">在项目架构时,如何选择打包构建工具?</a> <span class="text-muted">aiguangyuan</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%9E%B6%E6%9E%84/1.htm">前端架构</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">前端开发</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a> <div>在选择打包构建工具时,项目的具体需求、团队的技术栈、开发者的熟悉程度、以及项目的复杂度都是需要考虑的重要因素。1.项目规模与复杂度大型复杂项目:如果你的项目是一个大型复杂的单页应用程序(SPA),例如企业级应用,建议使用Webpack。Webpack的强大配置能力和丰富的插件生态系统能够满足复杂项目的各种需求,如代码拆分、缓存优化、懒加载等。中小型项目或库:如果是中小型项目或开发一个JavaScr</div> </li> <li><a href="/article/1942036595041431552.htm" title="TypeScript-webpack" target="_blank">TypeScript-webpack</a> <span class="text-muted">難釋懷</span> <a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>一、前言随着前端工程化的不断演进,使用TypeScript编写更加健壮、可维护的代码已成为主流趋势。而Webpack则是目前最流行的模块打包工具之一,它可以帮助我们将多个模块、资源文件进行打包压缩,适用于大型项目开发。本文将带你一步步搭建一个基于TypeScript+Webpack的开发环境,涵盖基础配置、编译流程、开发服务器设置等内容,适合初学者和中级开发者学习参考。二、什么是TypeScrip</div> </li> <li><a href="/article/1942034579405729792.htm" title="ModusToolbox 实战入门 - PSOC C3 Smart IO 与 GPIO 应用篇" target="_blank">ModusToolbox 实战入门 - PSOC C3 Smart IO 与 GPIO 应用篇</a> <span class="text-muted">WPG大大通</span> <a class="tag" taget="_blank" href="/search/Infineon%E4%BA%A7%E7%BA%BF/1.htm">Infineon产线</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%A4%A7%E9%80%9A/1.htm">大大通</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6/1.htm">软件</a><a class="tag" taget="_blank" href="/search/GPIO/1.htm">GPIO</a><a class="tag" taget="_blank" href="/search/CPU/1.htm">CPU</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/1.htm">开发工具</a> <div>摘要本文将带您了解PSOC™ControlC3MCU的架构与开发工具,并示范如何使用EclipseIDEforModusToolbox™创建项目。通过本次使用smartI/O外设的实作示例,您将学习如何将按钮输入引脚通过smartI/O连接至输出引脚,以驱动外部LED,在无需CPU参与的情况下完成初始化后自动运行,进一步体验PSOC™ControlC3的低功耗与高集成特性。软件下载与安装软件版本M</div> </li> <li><a href="/article/1942033949228331008.htm" title="Assistant API的原理及应用" target="_blank">Assistant API的原理及应用</a> <span class="text-muted">赛丽曼</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/chatgpt/1.htm">chatgpt</a> <div>什么是AssistantsAPI?**发布日期:**2023年11月6日,OpenAI在开发者大会上发布了AssistantsAPI——一款面向开发者的工具,用于在应用中构建AI助手。✅它可以做什么?AssistantsAPI允许开发者构建智能助手,这些助手可通过:instructions(指令):设定助手行为;models(模型):指定使用的GPT模型;tools(工具):调用代码解释器、知识库</div> </li> <li><a href="/article/1942033192034824192.htm" title="Java自定义类热加载实现原理与实践" target="_blank">Java自定义类热加载实现原理与实践</a> <span class="text-muted">weixin_ab</span> <a class="tag" taget="_blank" href="/search/%23%E7%B1%BB%E7%9A%84%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6/1.htm">#类的加载机制</a><a class="tag" taget="_blank" href="/search/java%E7%B1%BB%E5%8A%A0%E8%BD%BD/1.htm">java类加载</a> <div>Java自定义类热加载实现原理与实践在Java开发中,类热加载(ClassReloading)指在程序运行时动态替换已加载的类,避免重启应用。核心原理是通过自定义类加载器打破JVM类加载的固有规则,实现类的动态加载与更新。以下从实现原理、核心步骤、代码示例到生产实践展开详细解析。一、热加载核心原理:突破类加载机制限制1.类加载器的隔离性每个类加载器维护独立的命名空间,相同类名的类由不同加载器加载会</div> </li> <li><a href="/article/1942032435311079424.htm" title="【小米App】Blocky语言编程入门指南" target="_blank">【小米App】Blocky语言编程入门指南</a> <span class="text-muted">Botiway</span> <a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8APP/1.htm">移动APP</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/studio/1.htm">studio</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>Blocky语言编程入门指南Blocky是一种基于可视化积木块拼接的编程语言,特别适合编程初学者和儿童学习编程概念。以下是Blocky语言的入门指南:什么是Blocky语言Blocky是由Google开发的基于Web的可视化编程工具,它通过将不同功能的代码块像拼图一样连接起来进行编程,无需记忆语法规则。开始使用Blocky访问Blocky官方网站(https://blockly-demo.apps</div> </li> <li><a href="/article/1942031805133680640.htm" title="Vue3+Vite+TypeScript+Element Plus开发-22.客制Table组件" target="_blank">Vue3+Vite+TypeScript+Element Plus开发-22.客制Table组件</a> <span class="text-muted">秋之猫</span> <a class="tag" taget="_blank" href="/search/Plus%E5%BC%80%E5%8F%91/1.htm">Plus开发</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E6%8C%89%E9%92%AE%E7%BB%84%E4%BB%B6/1.htm">按钮组件</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E7%BB%84%E4%BB%B6/1.htm">表组件</a><a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a><a class="tag" taget="_blank" href="/search/vite/1.htm">vite</a><a class="tag" taget="_blank" href="/search/element/1.htm">element</a><a class="tag" taget="_blank" href="/search/plus/1.htm">plus</a> <div>系列文档目录Vue3+Vite+TypeScript安装ElementPlus安装与配置主页设计与router配置静态菜单设计Pinia引入Header响应式菜单缩展Mockjs引用与Axios封装登录设计登录成功跳转主页多用户动态加载菜单Pinia持久化动态路由-动态增加路由动态路由-动态删除路由路由守卫-无路由跳转404路由守卫-未登录跳转登录界面登录退出Tags-组件构建Tags-与菜单联动</div> </li> <li><a href="/article/1942031552569470976.htm" title="145、将程序划分为模块:深入理解C++中的模块化编程" target="_blank">145、将程序划分为模块:深入理解C++中的模块化编程</a> <span class="text-muted">raspberrypi5</span> <a class="tag" taget="_blank" href="/search/C%2B%2B%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E8%B7%B5/1.htm">C++编程入门与实践</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%9D%97%E5%8C%96%E7%BC%96%E7%A8%8B/1.htm">模块化编程</a><a class="tag" taget="_blank" href="/search/%E5%A4%B4%E6%96%87%E4%BB%B6/1.htm">头文件</a> <div>将程序划分为模块:深入理解C++中的模块化编程1.模块化编程的意义在软件开发中,将大型程序划分为较小的模块是一种常见的实践。这种做法不仅提高了代码的可维护性和可读性,还便于团队协作。通过将功能分离到不同的模块中,开发者可以专注于特定的功能实现,而不必担心整个程序的复杂性。此外,模块化编程还有助于代码的重用,减少了冗余代码的编写。优点总结减少编译时间:小模块可以更快地编译,特别是对于大型项目,整体编</div> </li> <li><a href="/article/1942031174520074240.htm" title="如何实现表格选中时禁用树结构的复选框功能(El-Tree 与 El-Table 联动实现)" target="_blank">如何实现表格选中时禁用树结构的复选框功能(El-Tree 与 El-Table 联动实现)</a> <span class="text-muted">Peak_Gao</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/elementui/1.htm">elementui</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>在前端开发中,树形结构和表格是常用的组件组合,尤其是在展示和管理复杂数据时。使用ElementUI的el-tree和el-table组件,我们可以实现当表格中有选中行时,自动禁用树结构中的复选框,反之亦然。这不仅提升了用户体验,还能有效防止数据操作上的冲突。本文将详细介绍如何实现这一功能,并提供相应的代码示例。实现思路树结构(el-tree):用于展示分层数据,支持复选框选择。表格(el-tabl</div> </li> <li><a href="/article/1942030164716220416.htm" title="定制化APP:开启企业数字化转型新未来" target="_blank">定制化APP:开启企业数字化转型新未来</a> <span class="text-muted">知码客</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E7%AC%94%E8%AE%B0/1.htm">程序员笔记</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E5%88%B6%E5%8C%96app/1.htm">定制化app</a> <div>在当今快速发展的数字时代,企业的生存与发展不仅依赖于其传统的运营模式,更需要借助创新的技术手段来提升效率、优化服务并创造价值。而定制化的移动应用程序(简称“定制化APP”)正是实现这一目标的重要工具之一。通过量身定制的应用程序,企业能够更好地满足自身独特的业务需求,从而在激烈的市场竞争中脱颖而出。什么是定制化APP?定制化APP是指根据企业的特定需求设计和开发的移动应用软件。与市场上通用的应用程序</div> </li> <li><a href="/article/1942028900108398592.htm" title="电商AI导购知识中心系统:助力企业数字化转型" target="_blank">电商AI导购知识中心系统:助力企业数字化转型</a> <span class="text-muted">AI智能应用</span> <a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%85%A5%E9%97%A8%E5%AE%9E%E6%88%98%E4%B8%8E%E8%BF%9B%E9%98%B6/1.htm">AI大模型应用入门实战与进阶</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E7%A7%91%E5%AD%A6/1.htm">计算科学</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E8%AE%A1%E7%AE%97/1.htm">神经计算</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%9E%8B%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大型语言模型</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RPA/1.htm">RPA</a> <div>1.背景介绍1.1电商行业发展趋势近年来,随着互联网技术的飞速发展和人们消费习惯的改变,电子商务行业呈现出蓬勃发展的态势。从传统电商平台到社交电商、直播电商等新兴模式,电商行业不断创新,为消费者提供更加便捷、高效的购物体验。然而,随着电商市场竞争日益激烈,企业面临着流量红利消失、获客成本攀升等挑战。为了在激烈的市场竞争中脱颖而出,电商企业需要不断提升自身的核心竞争力,而数字化转型成为必然选择。1.</div> </li> <li><a href="/article/1942028270031663104.htm" title="告别等等等我的大三奇遇记一款让代码飞起来的秘密武器(1750039621223600)" target="_blank">告别等等等我的大三奇遇记一款让代码飞起来的秘密武器(1750039621223600)</a> <span class="text-muted">Github项目推荐</span> <a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">计算机</a> <div>作为一名计算机科学与技术专业的大三学生,我总感觉自己的编程之路充满了“等等等”。编译项目要等,运行测试要等,尤其是在处理一些涉及网络请求和高并发的课程设计时,那慢吞吞的响应速度,简直让我怀疑人生。室友们也常常抱怨,咱们写的这些“玩具”项目,怎么就这么卡呢?直到一次偶然的机会,我接触到了一款堪称“黑科技”的框架,它彻底颠覆了我对Web后端开发的认知,让我的代码第一次有了“起飞”的感觉。这篇“奇遇记”</div> </li> <li><a href="/article/1942023731882815488.htm" title="Vue 3 + Element Plus 常见开发问题与解决方案手册" target="_blank">Vue 3 + Element Plus 常见开发问题与解决方案手册</a> <span class="text-muted">JaysonJin</span> <a class="tag" taget="_blank" href="/search/%E5%B0%8F%E9%97%AE%E9%A2%98/1.htm">小问题</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>Vue3+ElementPlus常见开发问题与解决方案手册本文整理了常见但容易混淆的几个Vue3前端开发问题,包括插槽、原型链、响应式数据处理、v-model报错、样式阴影控制等,建议收藏学习!一、动态插槽fallback原理详解✅场景在组件中使用如下代码:✅疑问为什么加了默认内容,父组件传了插槽就会生效,没传就自动使用默认内容?✅解答这是Vue插槽的fallback(回退)机制:父组件有传插槽,</div> </li> <li><a href="/article/1942020957132615680.htm" title="模块三:现代C++工程实践(4篇)第一篇《C++模块化开发:从Header-only到CMake模块化》" target="_blank">模块三:现代C++工程实践(4篇)第一篇《C++模块化开发:从Header-only到CMake模块化》</a> <span class="text-muted">AI迅剑</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/cmake/1.htm">cmake</a> <div>引言:现代C++工程化的核心挑战(终极扩展版)在云计算与物联网时代,C++项目规模呈指数级增长。传统Header-only开发模式暴露出编译效率低下、依赖管理混乱、版本冲突频发等致命问题。本文通过CMake3.22+Conan2.0工具链的深度集成,结合5个真实工业案例和200+行配置代码,系统阐述:Header-only库的模块化改造(含性能数据、内存分析)CMake高级配置技巧(目标属性、接口</div> </li> <li><a href="/article/1942019697444712448.htm" title="基于STM32设计的智能喂养系统(ESP8266+微信小程序)175" target="_blank">基于STM32设计的智能喂养系统(ESP8266+微信小程序)175</a> <span class="text-muted">DS小龙哥</span> <a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85%E4%B8%8E%E7%89%A9%E8%81%94%E7%BD%91%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">智能家居与物联网项目实战</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%96%82%E5%85%BB%E7%B3%BB%E7%BB%9F/1.htm">智能喂养系统</a><a class="tag" taget="_blank" href="/search/%E6%8A%95%E5%96%82%E7%B3%BB%E7%BB%9F/1.htm">投喂系统</a> <div>基于STM32设计的牛羊喂养系统(微信小程序)(175)文章目录一、前言1.1项目介绍【1】项目功能介绍【2】项目硬件模块组成【3】ESP8266工作模式配置【4】上位机开发【5】项目模块划分1.2项目功能需求1.3项目开发背景1.4开发工具的选择1.5系统框架图1.6系统原理图1.7硬件实物图二、硬件选型2.1STM32开发板2.3PCB板2.4蜂鸣器模块2.5USB下载线2.6水位传感器(2个</div> </li> <li><a href="/article/1942016165811384320.htm" title="Coze智能体开发:什么是提示词及其编写建议" target="_blank">Coze智能体开发:什么是提示词及其编写建议</a> <span class="text-muted">王国平</span> <a class="tag" taget="_blank" href="/search/Coze/1.htm">Coze</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Agent%E6%99%BA%E8%83%BD%E4%BD%93%E5%BC%80%E5%8F%91/1.htm">Agent智能体开发</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>提示词(Prompt)是AIAgent的核心,它决定了模型生成结果的质量和准确性。提示词不仅影响输出,还决定了模型对输入信息的理解深度。通过科学的提示词设计,开发者能高效引导模型生成符合预期的高质量输出。基础概念提示词提示词(Prompt)是用户在与模型或智能系统互动时输入的指令或文本,用来引导系统生成回应或执行特定任务。它可以是问题、命令或描述性文字,帮助系统理解用户的意图并提供相应的结果。提示</div> </li> <li><a href="/article/1942016166914486272.htm" title="Coze智能体开发:如何批量生成和处理图片" target="_blank">Coze智能体开发:如何批量生成和处理图片</a> <span class="text-muted">王国平</span> <a class="tag" taget="_blank" href="/search/Coze/1.htm">Coze</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Agent%E6%99%BA%E8%83%BD%E4%BD%93%E5%BC%80%E5%8F%91/1.htm">Agent智能体开发</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E4%BD%93/1.htm">智能体</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a> <div>在绘本制作、图片后期制作等场景中,往往需要使用模型来批量生成和处理图片。扣子提供了多个图像处理类节点,支持图像生成、添加水印、画质优化等多种常见的图片处理方式,你可以在批处理节点中嵌套图像生成等图像处理节点,实现图片的批量操作。本文档以绘本制作工作流为例,演示如何通过批处理节点和图像节点实现图像的批量生成和批量处理。效果演示通过绘本制作工作流,你可以批量生成类似以下风格的图片。搭建过程中你也可以根</div> </li> <li><a href="/article/1942016165056409600.htm" title="LangChain智能体开发:如何流式调用工具" target="_blank">LangChain智能体开发:如何流式调用工具</a> <span class="text-muted">王国平</span> <a class="tag" taget="_blank" href="/search/LangChain%E6%99%BA%E8%83%BD%E4%BD%93%E5%BC%80%E5%8F%91/1.htm">LangChain智能体开发</a><a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>当在流式上下文中调用工具时,消息块将通过.tool_call_chunks属性填充为工具调用块的对象列表。一个ToolCallChunk包含工具name、args和id的可选字符串字段,并包含一个可选的整数字段index,可用于将块连接在一起。字段是可选的因为工具调用的部分内容可能会跨不同的块进行流式传输(例如,一个包含参数子字符串的块可能对工具名称和id的值为null)。因为消息块继承自其父消息</div> </li> <li><a href="/article/1942014400835678208.htm" title="Spring Boot 牵手EasyExcel:解锁高效数据处理姿势" target="_blank">Spring Boot 牵手EasyExcel:解锁高效数据处理姿势</a> <span class="text-muted">灵犀学长</span> <a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/Boot/1.htm">Boot</a><a class="tag" taget="_blank" href="/search/%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91/1.htm">全栈开发</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>引言在日常的Java开发中,处理Excel文件是一个极为常见的需求。无论是数据的导入导出,还是报表的生成,Excel都扮演着重要的角色。例如,在企业的财务管理系统中,需要将每月的财务数据导出为Excel报表,方便财务人员进行数据分析和审计;在人力资源管理系统中,可能需要导入员工的基本信息、考勤记录等数据到系统中。然而,传统的Excel处理方式,如使用POI等工具,虽然功能强大,但在面对复杂的业务场</div> </li> <li><a href="/article/1942013895153610752.htm" title="SVG格式深度解析与Path应用实战:从原理到企业级全场景开发(实战版)" target="_blank">SVG格式深度解析与Path应用实战:从原理到企业级全场景开发(实战版)</a> <span class="text-muted"></span> <div>一、简介在数字图形领域,SVG(ScalableVectorGraphics)凭借其矢量特性、可编辑性和交互能力,成为现代设计和开发的核心工具。本文将从SVG的基础原理出发,深入解析其技术特性,并与主流图像格式(如JPEG、PNG、PLT等)进行对比分析。通过企业级应用案例,结合代码示例和Mermaid图表,帮助开发者全面掌握SVG的应用场景与开发技巧,实现从零到一的高效实践。二、SVG格式的核心</div> </li> <li><a href="/article/1942012888063471616.htm" title="【python实用小脚本-125】基于 Python 的 Gmail 邮件发送工具:实现高效邮件自动化" target="_blank">【python实用小脚本-125】基于 Python 的 Gmail 邮件发送工具:实现高效邮件自动化</a> <span class="text-muted">Kyln.Wu</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>引言在现代办公和开发环境中,邮件通信是一种重要的沟通方式。自动化发送邮件可以大大提高工作效率,例如发送通知、报告或文件。本文将介绍一个基于Python的Gmail邮件发送工具,它能够通过Gmail的SMTP服务器发送邮件,并支持附件功能。该工具主要利用了Python的smtplib库和email库,结合了邮件构建和网络通信技术,为用户提供了一个简单易用的邮件发送解决方案。总体功能概述Gmail邮件</div> </li> <li><a href="/article/1942010997975871488.htm" title="深入理解数据库领域的 SQL 索引失效问题" target="_blank">深入理解数据库领域的 SQL 索引失效问题</a> <span class="text-muted">数据库管理艺术</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>深入理解数据库领域的SQL索引失效问题关键词:SQL索引、索引失效、查询优化、执行计划、数据库性能、B+树、索引选择性摘要:本文深入探讨SQL索引失效的核心问题,分析导致索引失效的8种典型场景及其背后的原理机制。通过B+树索引结构解析、执行计划解读和实际案例演示,帮助开发者全面理解索引失效的本质原因。文章提供详细的优化方案和最佳实践,包括索引设计原则、SQL编写规范以及性能调优技巧,并附有MySQ</div> </li> <li><a href="/article/1942010365353193472.htm" title="探索 Vue.js 前端开发中的插件系统" target="_blank">探索 Vue.js 前端开发中的插件系统</a> <span class="text-muted">大厂前端小白菜</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>探索Vue.js前端开发中的插件系统关键词:Vue.js、插件系统、install方法、全局功能、代码复用、生命周期、模块化开发摘要:本文通过乐高积木的比喻,深入浅出地讲解Vue.js插件系统的核心原理。从install方法的工作原理到实战开发全局加载提示插件,揭秘如何通过插件机制实现功能扩展与代码复用,并探讨其在现代前端工程中的最佳实践。背景介绍目的和范围本文旨在帮助开发者理解Vue.js插件系</div> </li> <li><a href="/article/1942010364761796608.htm" title="React.js在前端移动端开发中的应用" target="_blank">React.js在前端移动端开发中的应用</a> <span class="text-muted">大厂前端小白菜</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>React.js在前端移动端开发中的应用关键词:React.js、移动端开发、跨平台、组件化、性能优化、ReactNative、PWA摘要:本文将深入探讨React.js在移动端开发中的应用场景和技术实现。从React的核心特性出发,分析其在移动端的优势,详细介绍ReactNative的工作原理,并通过实际案例展示如何构建高性能的移动应用。文章还将对比不同移动端开发方案,提供性能优化建议,并展望R</div> </li> <li><a href="/article/1942008223733182464.htm" title="【python实用小脚本-128】基于 Python 的 Hacker News 爬虫工具:自动化抓取新闻数据" target="_blank">【python实用小脚本-128】基于 Python 的 Hacker News 爬虫工具:自动化抓取新闻数据</a> <span class="text-muted">Kyln.Wu</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>引言在技术社区中,HackerNews是一个汇聚最新技术文章和讨论的热门平台。许多开发者和技术爱好者依赖它来获取行业动态和前沿资讯。然而,手动浏览和筛选这些文章可能耗时且低效。本文将介绍一个基于Python的HackerNews爬虫工具,它能够自动化地从HackerNews网站抓取最新文章,并将结果保存为CSV文件。该工具主要利用了Python的requests、BeautifulSoup和csv</div> </li> <li><a href="/article/1942003813502218240.htm" title="REACT (Web开发框架 : react)极速入门" target="_blank">REACT (Web开发框架 : react)极速入门</a> <span class="text-muted">masterphp</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>   前面讲过了很多后端,今天复习一下前端,为啥要讲React?对咯!我这边又被借调到前端组了,和前端的同学一起做React,以前有基础加上前端同学只做过Vue,所以我毫无疑问的又被借过去了......,这个是复习资料,高级玩家可略过。首先我要说一下,有Vue框架和JS原生的同学学习React会特别的快速,所以基础稍微差一点的同学可以先复习一下JS,特别说一下是JS老生常谈的,说明一下啥是Reac</div> </li> <li><a href="/article/105.htm" title="Js函数返回值" target="_blank">Js函数返回值</a> <span class="text-muted">_wy_</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/return/1.htm">return</a> <div>一、返回控制与函数结果,语法为:return 表达式;作用: 结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二、返回控制语法为:return;作用: 结束函数执行,返回调用函数,而且把undefined作为函数的结果 在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性</div> </li> <li><a href="/article/232.htm" title="MySQL 的 char 与 varchar" target="_blank">MySQL 的 char 与 varchar</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 今天发现,create table 时,MySQL 4.1有时会把 char 自动转换成 varchar 测试举例: CREATE TABLE `varcharLessThan4` ( `lastName` varchar(3) ) ; mysql> desc varcharLessThan4; +----------+---------+------+-</div> </li> <li><a href="/article/359.htm" title="Quartz——TriggerListener和JobListener" target="_blank">Quartz——TriggerListener和JobListener</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/TriggerListener/1.htm">TriggerListener</a><a class="tag" taget="_blank" href="/search/JobListener/1.htm">JobListener</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2208624 一.概述 listener是一个监听器对象,用于监听scheduler中发生的事件,然后执行相应的操作;你可能已经猜到了,TriggerListeners接受与trigger相关的事件,JobListeners接受与jobs相关的事件。   二.JobListener监听器  j</div> </li> <li><a href="/article/486.htm" title="oracle层次查询" target="_blank">oracle层次查询</a> <span class="text-muted">18289753290</span> <a class="tag" taget="_blank" href="/search/oracle%EF%BC%9B%E5%B1%82%E6%AC%A1%E6%9F%A5%E8%AF%A2%EF%BC%9B%E6%A0%91%E6%9F%A5%E8%AF%A2/1.htm">oracle;层次查询;树查询</a> <div>.oracle层次查询(connect  by) oracle的emp表中包含了一列mgr指出谁是雇员的经理,由于经理也是雇员,所以经理的信息也存储在emp表中。这样emp表就是一个自引用表,表中的mgr列是一个自引用列,它指向emp表中的empno列,mgr表示一个员工的管理者, select   empno,mgr,ename,sal  from e</div> </li> <li><a href="/article/613.htm" title="通过反射把map中的属性赋值到实体类bean对象中" target="_blank">通过反射把map中的属性赋值到实体类bean对象中</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/javaee/1.htm">javaee</a><a class="tag" taget="_blank" href="/search/%E6%B3%9B%E5%9E%8B/1.htm">泛型</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/1.htm">类型转换</a> <div>使用过struts2后感觉最方便的就是这个框架能自动把表单的参数赋值到action里面的对象中 但现在主要使用Spring框架的MVC,虽然也有@ModelAttribute可以使用但是明显感觉不方便。 好吧,那就自己再造一个轮子吧。 原理都知道,就是利用反射进行字段的赋值,下面贴代码 主要类如下:   import java.lang.reflect.Field; imp</div> </li> <li><a href="/article/740.htm" title="SAP HANA数据存储:传统硬盘的瓶颈问题" target="_blank">SAP HANA数据存储:传统硬盘的瓶颈问题</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/HANA/1.htm">HANA</a> <div>SAPHANA平台有各种各样的应用场景,这也意味着客户的实施方法有许多种选择,关键是如何挑选最适合他们需求的实施方案。 在 《Implementing SAP HANA》这本书中,介绍了SAP平台在现实场景中的运作原理,并给出了实施建议和成功案例供参考。本系列文章节选自《Implementing SAP HANA》,介绍了行存储和列存储的各自特点,以及SAP HANA的数据存储方式如何提升空间压</div> </li> <li><a href="/article/867.htm" title="Java Socket 多线程实现文件传输" target="_blank">Java Socket 多线程实现文件传输</a> <span class="text-muted">随便小屋</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/socket/1.htm">socket</a> <div>        高级操作系统作业,让用Socket实现文件传输,有些代码也是在网上找的,写的不好,如果大家能用就用上。 客户端类:   package edu.logic.client; import java.io.BufferedInputStream; import java.io.Buffered</div> </li> <li><a href="/article/994.htm" title="java初学者路径" target="_blank">java初学者路径</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>学习Java有没有什么捷径?要想学好Java,首先要知道Java的大致分类。自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE</div> </li> <li><a href="/article/1121.htm" title="APP推广" target="_blank">APP推广</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/APP/1.htm">APP</a><a class="tag" taget="_blank" href="/search/%E6%8E%A8%E5%B9%BF/1.htm">推广</a> <div>一,免费篇 1,APP推荐类网站自主推荐 最美应用、酷安网、DEMO8、木蚂蚁发现频道等,如果产品独特新颖,还能获取最美应用的评测推荐。PS:推荐简单。只要产品有趣好玩,用户会自主分享传播。例如足迹APP在最美应用推荐一次,几天用户暴增将服务器击垮。 2,各大应用商店首发合作 老实盯着排期,多给应用市场官方负责人献殷勤。 3,论坛贴吧推广 百度知道,百度贴吧,猫扑论坛,天涯社区,豆瓣(</div> </li> <li><a href="/article/1248.htm" title="JSP转发与重定向" target="_blank">JSP转发与重定向</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a><a class="tag" taget="_blank" href="/search/jsp%E8%BD%AC%E5%8F%91/1.htm">jsp转发</a> <div>  在servlet和jsp中我们经常需要请求,这时就需要用到转发和重定向;   转发包括;forward和include     例子;forwrad转发;  将请求装法给reg.html页面   关键代码;    req.getRequestDispatcher("reg.html</div> </li> <li><a href="/article/1375.htm" title="web.xml之jsp-config" target="_blank">web.xml之jsp-config</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/jsp-config/1.htm">jsp-config</a> <div>1.作用:主要用于设定JSP页面的相关配置。 2.常见定义: <jsp-config> <taglib> <taglib-uri>URI(定义TLD文件的URI,JSP页面的tablib命令可以经由此URI获取到TLD文件)</tablib-uri> <taglib-location> TLD文件所在的位置 </div> </li> <li><a href="/article/1502.htm" title="JSF2.2 ViewScoped Using CDI" target="_blank">JSF2.2 ViewScoped Using CDI</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/CDI/1.htm">CDI</a><a class="tag" taget="_blank" href="/search/JSF+2.2/1.htm">JSF 2.2</a><a class="tag" taget="_blank" href="/search/ViewScoped/1.htm">ViewScoped</a> <div>JSF 2.0 introduced annotation @ViewScoped; A bean annotated with this scope maintained its state as long as the user stays on the same view(reloads or navigation - no intervening views). One problem w</div> </li> <li><a href="/article/1629.htm" title="【分布式数据一致性二】Zookeeper数据读写一致性" target="_blank">【分布式数据一致性二】Zookeeper数据读写一致性</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>很多文档说Zookeeper是强一致性保证,事实不然。关于一致性模型请参考http://bit1129.iteye.com/blog/2155336    Zookeeper的数据同步协议 Zookeeper采用称为Quorum Based Protocol的数据同步协议。假如Zookeeper集群有N台Zookeeper服务器(N通常取奇数,3台能够满足数据可靠性同时</div> </li> <li><a href="/article/1756.htm" title="Java开发笔记" target="_blank">Java开发笔记</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/java%E5%BC%80%E5%8F%91/1.htm">java开发</a> <div>1、Map<key,value>的remove方法只能识别相同类型的key值   Map<Integer,String> map = new HashMap<Integer,String>(); map.put(1,"a"); map.put(2,"b"); map.put(3,"c"</div> </li> <li><a href="/article/1883.htm" title="图片黑色阴影" target="_blank">图片黑色阴影</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87/1.htm">图片</a> <div> .event{ padding:0;    width:460px;    min-width: 460px;    border:0px solid #e4e4e4;    height: 350px;    min-heig</div> </li> <li><a href="/article/2010.htm" title="编程之美-饮料供货-动态规划" target="_blank">编程之美-饮料供货-动态规划</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/1.htm">动态规划</a> <div> import java.util.Arrays; import java.util.Random; public class BeverageSupply { /** * 编程之美 饮料供货 * 设Opt(V’,i)表示从i到n-1种饮料中,总容量为V’的方案中,满意度之和的最大值。 * 那么递归式就应该是:Opt(V’,i)=max{ k * Hi+Op</div> </li> <li><a href="/article/2137.htm" title="ajax大参数(大数据)提交性能分析" target="_blank">ajax大参数(大数据)提交性能分析</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/prototype/1.htm">prototype</a> <div>近期在项目中发现如下一个问题 项目中有个提交现场事件的功能,该功能主要是在web客户端保存现场数据(主要有截屏,终端日志等信息)然后提交到服务器上方便我们分析定位问题。客户在使用该功能的过程中反应点击提交后反应很慢,大概要等10到20秒的时间浏览器才能操作,期间页面不响应事件。 根据客户描述分析了下的代码流程,很简单,主要通过OCX控件截屏,在将前端的日志等文件使用OCX控件打包,在将之转换为</div> </li> <li><a href="/article/2264.htm" title="[宇宙与天文]在太空采矿,在太空建造" target="_blank">[宇宙与天文]在太空采矿,在太空建造</a> <span class="text-muted">comsci</span> <div>     我们在太空进行工业活动...但是不太可能把太空工业产品又运回到地面上进行加工,而一般是在哪里开采,就在哪里加工,太空的微重力环境,可能会使我们的工业产品的制造尺度非常巨大....      地球上制造的最大工业机器是超级油轮和航空母舰,再大些就会遇到困难了,但是在空间船坞中,制造的最大工业机器,可能就没</div> </li> <li><a href="/article/2391.htm" title="ORACLE中CONSTRAINT的四对属性" target="_blank">ORACLE中CONSTRAINT的四对属性</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/CONSTRAINT/1.htm">CONSTRAINT</a> <div>ORACLE中CONSTRAINT的四对属性 summary:在data migrate时,某些表的约束总是困扰着我们,让我们的migratet举步维艰,如何利用约束本身的属性来处理这些问题呢?本文详细介绍了约束的四对属性: Deferrable/not deferrable, Deferred/immediate, enalbe/disable, validate/novalidate,以及如</div> </li> <li><a href="/article/2518.htm" title="Gradle入门教程" target="_blank">Gradle入门教程</a> <span class="text-muted">dengkane</span> <a class="tag" taget="_blank" href="/search/gradle/1.htm">gradle</a> <div>一、寻找gradle的历程 一开始的时候,我们只有一个工程,所有要用到的jar包都放到工程目录下面,时间长了,工程越来越大,使用到的jar包也越来越多,难以理解jar之间的依赖关系。再后来我们把旧的工程拆分到不同的工程里,靠ide来管理工程之间的依赖关系,各工程下的jar包依赖是杂乱的。一段时间后,我们发现用ide来管理项程很不方便,比如不方便脱离ide自动构建,于是我们写自己的ant脚本。再后</div> </li> <li><a href="/article/2645.htm" title="C语言简单循环示例" target="_blank">C语言简单循环示例</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a> <div># include <stdio.h> int main(void) { int i; int count = 0; int sum = 0; float avg; for (i=1; i<=100; i++) { if (i%2==0) { count++; sum += i; } } avg</div> </li> <li><a href="/article/2772.htm" title="presentModalViewController 的动画效果" target="_blank">presentModalViewController 的动画效果</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/controller/1.htm">controller</a> <div>系统自带(四种效果): presentModalViewController模态的动画效果设置:     [cpp]  view plain copy   UIViewController *detailViewController = [[UIViewController al</div> </li> <li><a href="/article/2899.htm" title="java 二分查找" target="_blank">java 二分查找</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/1.htm">二分查找</a><a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/1.htm">java二分查找</a> <div>需求:在排好顺序的一串数字中,找到数字T   一般解法:从左到右扫描数据,其运行花费线性时间O(N)。然而这个算法并没有用到该表已经排序的事实。 /** * * @param array * 顺序数组 * @param t * 要查找对象 * @return */ public stati</div> </li> <li><a href="/article/3026.htm" title="Spring Security(07)——缓存UserDetails" target="_blank">Spring Security(07)——缓存UserDetails</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a> <div>        Spring Security提供了一个实现了可以缓存UserDetails的UserDetailsService实现类,CachingUserDetailsService。该类的构造接收一个用于真正加载UserDetails的UserDetailsService实现类。当需要加载UserDetails时,其首先会从缓存中获取,如果缓存中没</div> </li> <li><a href="/article/3153.htm" title="Dozer 深层次复制" target="_blank">Dozer 深层次复制</a> <span class="text-muted">jayluns</span> <a class="tag" taget="_blank" href="/search/VO/1.htm">VO</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/po/1.htm">po</a> <div>最近在做项目上遇到了一些小问题,因为架构在做设计的时候web前段展示用到了vo层,而在后台进行与数据库层操作的时候用到的是Po层。这样在业务层返回vo到控制层,每一次都需要从po-->转化到vo层,用到BeanUtils.copyProperties(source, target)只能复制简单的属性,因为实体类都配置了hibernate那些关联关系,所以它满足不了现在的需求,但后发现还有个很</div> </li> <li><a href="/article/3280.htm" title="CSS规范整理(摘自懒人图库)" target="_blank">CSS规范整理(摘自懒人图库)</a> <span class="text-muted">a409435341</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a> <div>   刚没事闲着在网上瞎逛,找了一篇CSS规范整理,粗略看了一下后还蛮有一定的道理,并自问是否有这样的规范,这也是初入前端开发的人一个很好的规范吧。 一、文件规范 1、文件均归档至约定的目录中。 具体要求通过豆瓣的CSS规范进行讲解: 所有的CSS分为两大类:通用类和业务类。通用的CSS文件,放在如下目录中: 基本样式库 /css/core </div> </li> <li><a href="/article/3407.htm" title="C++动态链接库创建与使用" target="_blank">C++动态链接库创建与使用</a> <span class="text-muted">你不认识的休道人</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/dll/1.htm">dll</a> <div>一、创建动态链接库 1.新建工程test中选择”MFC [dll]”dll类型选择第二项"Regular DLL With MFC shared linked",完成 2.在test.h中添加 extern “C” 返回类型 _declspec(dllexport)函数名(参数列表); 3.在test.cpp中最后写 extern “C” 返回类型 _decls</div> </li> <li><a href="/article/3534.htm" title="Android代码混淆之ProGuard" target="_blank">Android代码混淆之ProGuard</a> <span class="text-muted">rensanning</span> <a class="tag" taget="_blank" href="/search/ProGuard/1.htm">ProGuard</a> <div>Android应用的Java代码,通过反编译apk文件(dex2jar、apktool)很容易得到源代码,所以在release版本的apk中一定要混淆一下一些关键的Java源码。 ProGuard是一个开源的Java代码混淆器(obfuscation)。ADT r8开始它被默认集成到了Android SDK中。 官网: http://proguard.sourceforge.net/</div> </li> <li><a href="/article/3661.htm" title="程序员在编程中遇到的奇葩弱智问题" target="_blank">程序员在编程中遇到的奇葩弱智问题</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>  现在收集一下:         排名不分先后,按照发言顺序来的。   1、Jquery插件一个通用函数一直报错,尤其是很明显是存在的函数,很有可能就是你没有引入jquery。。。或者版本不对 2、调试半天没变化:不在同一个文件中调试。这个很可怕,我们很多时候会备份好几个项目,改完发现改错了。有个群友说的好:   在汤匙</div> </li> <li><a href="/article/3788.htm" title="解决maven-dependency-plugin (goals "copy-dependencies","unpack") is not supported" target="_blank">解决maven-dependency-plugin (goals "copy-dependencies","unpack") is not supported</a> <span class="text-muted">xp9802</span> <a class="tag" taget="_blank" href="/search/dependency/1.htm">dependency</a> <div>解决办法:在plugins之前添加如下pluginManagement,二者前后顺序如下:   [html]  view plain copy   <build>           <pluginManagement</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>