E-COM-NET

  • 首页
  • 在线工具
  • Layui镜像站
  • SUI文档
  • 联系我们
weixin_30596023
weixin_30596023

Web技巧(16)

  • javascript
  • 开发工具
  • python

上个周末因为自己要写PPT而没来得急整理,所以又错过了一期。在这一期中,大部分内容将围绕着@Bill Mei的《Top 10 most deadly CSS mistakes made by new and experienced developers》文章中提到观点来展开。这里面的一些观点虽然不完全对,但还是有相应的参考价值,取舍由大家自己来决定。如果你在这方面也有相关的经验,也欢迎在下面的评论中分享。另外在后面会简单的整理几个最近觉得有意思的新东西。感兴趣的同学,请继续往下阅读。

10个最致命的CSS错误

多年来,很多工程师在使用CSS时容易犯一些常见的错误,不管是老司机还是新手。而CSS一直又是简单但不容易的语言(不直观和难以使用),真正探究的并不多,而很多常见的错误又往往会阻碍项目的开发进程。如果我们在编写CSS的时候就能避免这些错误,是不是在实际开发的时候能事半功倍。

以下是编写CSS中常见的10个错误,也是最致命的错误。

接下来的10条内容来自于@Bill Mei的《Top 10 most deadly CSS mistakes made by new and experienced developers》一文。

编写选择器时太过遵循DOM结构

有一些开发人员喜欢追求一种极简主义的风格,他们试图着不在HTML中有大量的类名(class),通过使用DOM结构来作为CSS的选择器,这样他们的选择器就会遵循DOM树的结构。比如有这么一个DOM结构:


    
This link is not bold

This link is bold

This link is not bold
复制代码

有些同学在给a链接添加样式的时候,会这样的操作:

body .container .main-content .blog-row .blog-col section article p a {
    font-weight: bold;
}
复制代码

就算是在使用CSS处理器的时候也无限级的嵌套,经如:

body {
    .container{
        .main-content{
            .blog-row{
                .blog-col{
                    section{
                        article{
                            p{
                                a{
                                    font-weight: bold;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
复制代码

特别是在CSS的处理器中,不要说是新手,很多老司机也会出现类似上面这样的错误。

虽然在编写HTML结构的时候,很多司机也提倡DOM结构能简洁就尽量的简洁,但并不是提倡这种无约束的极简主义。因为这种极简主义虽然保持了HTML的干净,但会让CSS变得混乱,使其更难理解、调试和更改。就如上面的示例所示,CSS会变得不灵活,因为长组合的CSS选择器承担了复制HTML结构的任务,但这有背于CSS应该做的事情。

CSS的任务是提供样式;HTML的任务是提供结构。这也是Web构建中最基本的原则之一。如果仅仅追求DOM简洁干净,而忽略CSS,不考虑与CSS相互结合,这是错误的一种做法。另外这种编写CSS的方式强度依赖于HTML的DOM结构树,也会造成很多致命性的错误,比如说,你的HTML结构做出调整,那么CSS选择器也将做调整,而这种长链条的组合是最易于出错的。这种做法也在无形中增加很多不必要的工作。

相反,我更建议CSS的类和HTML的DOM更应该合理的结合起来。如果你需要从页面中选择一个特定的元素,应该在该元素上添加一个类名来完成:

.bold {
    font-weight: bold;
}
复制代码

就算是你要使用这种长组合的方式来定位到DOM元素,我也强烈建议:

CSS的选择器不超过三级。

幸运的是,现在有很多方式可以帮助我们避免这种方式,比如借助StyleLint来监控你的CSS代码,让选择器不超三级嵌套。也可以使用CSS-in-JS和CSS Modules方式来维护你的CSS代码。特别今天(截至2019年),这种方式更被广泛的采用。

如果你对CSS-in-JS和CSS Modules感兴趣的话,我建议你花点时间阅读下面的相关文章:

  • React中CSS Modules的使用
  • Vue中的作用域CSS和CSS模块的差异
  • PostCSS-modules: 让CSS变得更强大
  • React中编写CSS的姿势

话说回来,我们在项目中应该避免目标过于明确或指定过多的选择器,并且要避免使用!important。CSS权重的对比让我们更直观地了解为什么选择器器权重过大是不好的。如果选择器权重过大,它会更易被采用,如果我们想要通过另一个选择器来覆盖它,就需要一个权重更大的选择器。这也是令很多同学在覆盖样式时感到痛苦之处。

CSS选择器权重的争夺战是一直存在你的CSS中,这也是令很多老司机和新手痛苦之处。如果你是新手,那么掌握CSS选择器权重是的计算是非常有必要的:

  • CSS 选择器
  • CSS Specificity: Things You Should Know【译文】
  • The Definitive Guide to CSS Cascading and Specificity
  • CSS Specificity

说到CSS选择器权重之争,我又要上@Elijah Manor

如果上图还无法让你整明白CSS选择器权重的计算,那么下面这个计算器就可以帮助你更好的理解:

编写HTML时忽略SEO

搜索引擎优化(SEO)不仅仅是你完成编码后交给营销团队来处理。我们在编码的时候就需要考虑到SEO的内容,特别是因为一些影响SEO的因素。因为影响SEO因素一旦产生,那么后续要优化的难度就会更大。比如网站的URL Scheme或服务体系结构。

众所周知,HTML的语义化标签是影响SEO的因素之一,因为标签的选择会影响搜索引擎对内容的理解和排名。如果你想显示在搜索结果的顶部附近,那么就得选择正确的标签。

假设你正在写一篇关于CSS教程的文章。你可以把所有内容都放在一个

中,然而
是一个通用的非语义的标签,它不包含内容中的任何内在的含义。相反,你应该选择一个更具体的语义标签,例如
来包含文章的内容,
来包含到跳转到其他文章的链接。

选择更具体的语义标签而不是一般非语义标签的好处是,你可以向搜索引擎提供关于你的网站更多的信息,这样一来,搜索引擎的爬虫能更好的理解和交付与读者的搜索查询相关的内容。

例如,用于文章标题的HTML标签,它有六个潜在的标题标签,按最重要的标题到最不重要的标题的顺序排列h1~h6(数值越小,表示越重要)。

是你最重要的标题,因为它是一个特殊的信号,搜索引擎会把这个理解为你内容的标题或者页面的标题(</code>,大多数搜索引擎两者都会考虑)。此外,如果你的用户视力受损,并且使用屏幕阅读器,大多数屏幕阅读器都知道要立即大声的朗读<code><h1></code>中的内容,因为它会先假定这是你的内容的标题。</p> <p>这也意味着,如果你使用<code><h1></code>来处理任何不是标题的内容,或者你在一个页面上有多个<code><h1></code>,搜索引擎就会被混淆,你的“真实”标题(想要第一时间让搜索引擎识别的标题)可能不会出现在搜索结果中。另外的一个情况是,在不同的部分嵌套多个<code><h1></code>,比如:</p> <pre><code class="copyable"><article> <h1>My cool blog post</h1> <p>This blog is so cool!</p> </article> <footer> <h1>Contact Us</h1> <p>Tel: 867-5309</p> </footer> <span class="copy-code-btn">复制代码</span></code></pre> <p>尽管这个页面上有两个<code><h1></code>标签,但第一个是在<code><article></code>中,而另一个是在<code><footer></code>标签中。由于搜索引擎理解<code><article></code>的内容要比<code><footer></code>的内容更重要,更有趣;所以它会使用<code><article></code>中的<code><h1></code>,而不是<code><footer></code>中的<code><h1></code>当作标题。所以在某种意义上,你的父母是谁,决定了你有多重要。现实生活中也是如此,有个好爹是多么的重要。</p> <p>有关于HTML正确的打开姿势,@Daniel Tonon的《How to Section Your HTML》一文就做过这方面深入的探讨:</p> <p></p> <p></p> <p>有关于HTML标签和SEO之间的关系,更多的内容可以阅读下面的文章:</p> <ul> <li>8 Meta Tags That Improve SEO</li> <li>5 Easy HTML Tags Anyone Can Code and Every Webpage Needs</li> <li>Meta Tags in 2019: Why are They Important in SEO?</li> <li>7 Essential HTML Tags that Separate SEO Pros from the Rookies</li> <li>The 10 Most Important HTML Tags You Need to Know for SEO</li> <li>HTML Tags for SEO: to use or not to use?</li> </ul> <p>随着JavaScript框架的崛起,比如<code>Vue</code>,<code>React</code>等。很多同学平时在使用这些JavaScritp框开发页面的时候,可能也不太关注什么SEO相关的事情。事实上在国外有关于Vue,React开发页面时对SEO方面的讨论还是蛮多的,感兴趣可以阅读:</p> <ul> <li>Is My Single-Page App SEO Friendly?</li> <li>Build a Vue.js SEO-Friendly SPA with Prerender & Other Tips</li> <li>Vue.js SEO Tips</li> <li>Essential Guide to Improve SEO in Single Page Application Vue.js</li> <li>SEO vs. React: Web Crawlers are Smarter Than You Think</li> <li>The Ultimate Guide to JavaScript SEO</li> </ul> <p>另外在Reddit和知乎上也有相关的讨论:</p> <ul> <li>How do you deal with SEO if you want to use Vue or React for the front end?</li> <li>用了react 或者 vue,如何做SEO优化呢?</li> </ul> <p>最后在给大家推荐一个工具<strong>Prerendering</strong>,号称是最好的SEO解决方案:</p> <blockquote> <p><strong>The best SEO solution, and SSR replacement for JavaScript websites. It’s like SSR with no need of coding.</strong></p> </blockquote> <p></p> <p></p> <h3 class="heading">使用<code>px</code>单位</h3> <p>使用<code>px</code>单位并不是一个错误,但要看使用的场景。真正的错误是使用<strong>绝对单位</strong>而不是<strong>相对单位</strong>。</p> <p></p> <p></p> <blockquote> <p>有关于CSS单位更多的介绍,可以阅读《图解CSS:CSS 的值和单位》一文或点击这里了解更多的内容。</p> </blockquote> <p>我们更喜欢使用相对测量方法,比如<code>em</code>、<code>%</code>、<code>rem</code>和其他可能的方法。之确保了网站的缩放比例能根据<code>font-size</code>进行缩放。</p> <pre><code class="copyable">// 不好的用法 p { font-size: 16px; line-height: 20px; margin-bottom: 8px; } // 好的用法 body { font-size: 16px; } p { font-size: 1rem; line-height: 1.25; margin-bottom: 0.5em; } <span class="copy-code-btn">复制代码</span></code></pre> <p>比如下图,就是使用<code>em</code>单位好的缩影:</p> <p></p> <p></p> <p>时至今日,使用<code>px</code>这种绝对单位的问题是无法较好的适配于不同终端,特别是在移动终端上,面对的场景更为复杂。如果使用<code>px</code>单位不能让你的Web页面或Web应用程序在任何地方都保持相同的比例,所以你必须尝试将你的元素放在相对项中,而不是绝对项中。否则,屏幕上的可用空间不能适当地缩放到每个窗口大小。相对单位使用这种简单的<code>px</code>锁定你的设计到特定的缩放级别,使你的设计难以缩放到不同的设备。</p> <p>在移动端的天下,我更建议使用视窗单位来做测量单位,更易于让你的设计能在不同的设备终端达到缩放效果。如果你对这方面感兴趣,建议您花点时间阅读:</p> <ul> <li>使用Flexible实现手淘H5页面的终端适配</li> <li>再聊移动端页面的适配</li> <li>如何在Vue项目中使用vw实现移动端适配</li> <li>视窗单位在移动端上的使用技巧</li> <li>单屏页面响应式适配玩法</li> </ul> <h3 class="heading">试图实现“像素级”的完美设计</h3> <blockquote> <p>更普遍地说,在编写CSS时,“像素级”的完美设计并不是一个好的目标。</p> </blockquote> <p>现代Web页面或Web应用程序必须跨多种设备(移动设备、桌面设备、平板电脑、TV大屏和手表)运行,其中有多样的屏幕大小、屏幕分辨率、操作系统、用户设置和JavaScript引擎,这些都会干扰渲染“像素级”完美设计的能力。</p> <p>在我看来,一味地追求“像素级”完美的设计将需要更多额外的代码来处理,这些额外的代码将带来更大的复杂性和潜在的风险。可以说是“付出与收益不成正比”。</p> <p>不过有一点需要特别提出,<strong>不要将“像素级”的完美设计和优秀的设计混淆</strong>。真正伟大的设计是给用户留下持久的情感影响。这是当他们打开你的产品时所得到的快乐,也是他们从你的Web应用中得到的快乐。而这一切并不是<strong>你选择<code>16pt</code>字号而不是<code>15pt</code>字号的崇拜</strong>。</p> <h3 class="heading">中断文档流</h3> <p>CSS的棘手之处在于使用不同的CSS代码可以实现相同的视觉效果。例如,要将页面上的元素水平垂直居中,可以有很多种方式,使用任何一处都可以让你的用户看到相同的效果。</p> <blockquote> <p>@Amos整理了相关的技巧,可达23种方式来实现垂直居中。</p> </blockquote> <p>虽然实现同一效果有很多种方式,但我建议我们在实现效果的时候应该尽量的避免中断文档流。因为过于频繁地中断文档流(例如,过度使用<code>float</code>)会增加对内存的占用,而且让别的小伙伴甚至是你自己更难理解。</p> <blockquote> <p><strong>当有多个方案实现相同的视觉效果时,我更喜欢使用中用内存空间更小的技术。</strong></p> </blockquote> <h3 class="heading">不将设计和布局分离</h3> <p>CSS的任务是提供样式,HTML的任务是提供结构。通常,你应该首先以捕获页面信息结构层次的方式编写HTML。即:</p> <blockquote> <p><strong>在编写HTML的时候,应该忽略任何设计关注点</strong>。</p> </blockquote> <p>然后,添加CSS,让视觉上看起来很好。</p> <p>虽然HTML提供了结构,但它不能总是将元素定位在你希望它在页面上出现的准确位置。因此,可以使用CSS构建页面的正确布局,以便元素出现在正确的位置。一旦一个元素被放置在页面的正确位置,就可以很容易地修饰它,使它看起来很漂亮,而不用担心它的位置。因此:</p> <blockquote> <p><strong>CSS布局(Layout CSS)和CSS美化(Lipstick CSS)是做着不同的事情</strong>。</p> </blockquote> <p>简单的看两示例:</p> <pre><code class="copyable">// 不好的示例 .article { display: inline-block; width: 50%; margin-bottom: 1em; font-family: sans-serif; border-radius: 1rem; box-shadow: 12px 12px 2px 1px rgba(0, 0, 0, .2); } .sidebar { width: 25%; margin-left: 5px; } <div class="article"></div> <div class="article sidebar"></div> // 好的示例 /* Layout */ .article, .sidebar { display: inline-block; } .article { width: 50%; margin-bottom: 1em; } .sidebar { width: 25%; margin-left: 5px; } /* Lipstick */ .card { font-family: sans-serif; border-radius: 1rem; box-shadow: 12px 12px 2px 1px rgba(0, 0, 0, .2); } <div class="article card"></div> <div class="sidebar card"></div> <span class="copy-code-btn">复制代码</span></code></pre> <p>CSS布局(Layout CSS)和CSS美化(Lipstick CSS)工作的分开也被称为<strong>关注点分离(Separation of Concerns)</strong>,这是软件工程的一个通用原则,有<strong>助于保持代码的可维护性和易于理解</strong>。</p> <p>我们希望使用合适的工具来完成这项工作,因为以这种方式分离CSS可以很容易地将一个元素移动到页面的另一部分,而不会弄脏Lipstick CSS,还可以很容易的更改Lipstick,而不会破坏Layout。每次我们添加一个新特性时,混合使用之两种方法都会迫使我们同时做这两项工作。</p> <h3 class="heading">移动先行</h3> <p>随着移动终端的普及率的提高,移动网站(或应用)成为主流。很多人开始提“移动第一”,在提这个理念的时候也意味着桌面(PC端)是二等公民。相反,“移动优先”的拥护者则表现出相反的行为,他们首先为桌面编写代码,然后试图将网站塞进移动端。他们使用<code>@media</code>来处理移动端设备上的异常,但实际情况是<strong>桌面端才应该是异常</strong>。</p> <p>在这个移动端的时代,你的用户首先通过他们的手机找到你,然后他们要是足够喜欢你的产品,才会到桌面端去体验。但在你的设计师、开发者和产品经理看来,手机真的是第一位吗?你是否先编写移动端的代码,然后再构建桌面端?你的设计师是先为手机创建线框图和模型,然后再为台式机创建线框和模型吗?在测试桌面版本之前,你是否在移动端版本上执行<code>A/B</code>测试,并征求用户的反馈?</p> <pre><code class="copyable">//不好的做法 .container { width: 980px; padding: 1em; } @media (max-width: 979px) { .container { width: 100%; padding: 0.5em; } } // 好的做法 .container { width: 100%; max-width: 980px; padding: 0.5em; } @media (min-width: 980px) { .container { padding: 1em; } } <span class="copy-code-btn">复制代码</span></code></pre> <p>另外一个主要的原因是,从移动端上往大屏幕上扩展会更容易;但要从大屏幕上删除元素使其适合较小屏幕,就会比较棘手。</p> <p></p> <p></p> <h3 class="heading">没有使用命名方案</h3> <blockquote> <p>Namespaces are one honking great idea – let’s do more of those! — PEP 20: The Zen of Python</p> </blockquote> <p>在CSS中给元素命名总是很烦人的,如果让你不要考虑命名方案就直接写代码,你一定会很兴奋。例如你给一个<code><img></code>元素添加类名的时候,你可能会将它命名为<code>.img</code>、<code>.image</code>、<code>.blog-img</code>、<code>.img-blog</code>等。如果你将它命名为<code>.blog-img</code>,那之后你还会接受<code>.ad-img</code>和<code>.thumbnail-img</code>的命名?</p> <p>给元素命什么样的名,虽然看起来是一件很小的事情,但是<strong>CSS要比其他语言更难重构</strong>,因为我们目前没有任何用于CSS的静态分析工具来执行自动重构或重命名。CSS类可以使用JavaScript动态地添加、删除和构造,因此不可能找到“未声明”的CSS选择器 —— 仅仅因为CSS片段没有在一个页面的一个状态中使用,并不意味着它从示使用过。</p> <p>另外,如果你的团队不能就是否将其命名为<code>.center</code>、<code>.centre</code>、<code>.centered</code>、<code>.text-center</code>或<code>.align-center</code>达成一致,那么BEM也就无法解决之个问题。</p> <p>在一些JavaScript框架中,使用CSS-in-JS可以部分地解决这个问题,因为这些框架删除了CSS的全局作用域,并鼓励你将样式与其关联的组件放在一起。然而,CSS-in-JS还没有被广泛采用,而且这方面的争议也很多。</p> <p>还有一个主要原因是,开发人员在删除任何可能破坏网站的内容时总是会犹豫不决。因此大家宁可谨慎行事,也可愿增加垃圾代码,也不敢去冒险。更糟糕的是,除非你很努力的推广和清晰地沟通你的设计系统,否则它可能会被忽视,因为你的同事会避免阅读你的文档,继续他们的老习惯。</p> <h3 class="heading">不阅读文档</h3> <p>这看起来似乎很简单。比如说使用Bootstrap,很多同学认为只要安装了就可以了。不幸的是,如果你不真正理解CSS框架(CSS Framework),并且不小心违背了它的原则,那么它常常会导致比引用它来解决问题更多的问题出现。无论你使用的是Bootstrap、Material Design、Foundation等开源设计系统,还是你自己团队开发的设计系统。</p> <p>因此,在使用任何一个框架或系统之前,很有必要花一定的时间去阅读相关的文档。</p> <p>认真阅读文档是很重要的,因为许多框架要求你取消从以前的框架中提取的肌肉记忆,而且只有阅读了整个手册,你才能知道其缺陷在哪里。例如,组件继承是较老的前端框架中的一种常见模式。然而,React这样的新框架在使用组合而不是继承时工作是最好的。如果跳过文档的阅读,你很可能就不会意识到这一点,你可能就会默认使用你习惯的继承模式。</p> <p>更普遍地说,<strong>你被从旧技术发展而来的肌肉记忆所困住是很危险的</strong>,这会导致我们犯最后一个致命的错误。</p> <h3 class="heading">没有按照计划系统地学习CSS</h3> <blockquote> <p>技术是不断革新的,保持相关性的唯一方法是<strong>遵循一个持续学习和改进的计划</strong>。</p> </blockquote> <p>从教条中死记硬背知识是很危险的。一些有经验的开发人员一听到“内联样式(Inline Style)”就有着一种本能的反感,因为在他们的职业生涯的早期就被教导**“样式和结构的分离;永远不要使用内联样式”**。</p> <p>事实上,“<strong>永远不要使用内联样式</strong>”是很久以前的最佳实践。那是当时的背景下会使HTML难以阅读、调试和更新。然而,这项技术的进展缓慢,最终颠覆了导致这些“最佳实践”的假设。<strong>新的假设导至新的最佳实践</strong>。</p> <p>内联样式只有在行内写样式才是真正的痛苦,但如果使用CSS-in-JS的库来管理你的内联样式时,这些所谓的缺点就消失了,而你的优势也就只剩下代码模块化,自动化测试和简单的管理工作等。</p> <p>如果你固守着“永远不要使用内联样式”的教条,那么当最初的假设发生变化时,你就不会有好奇心去探究它意味着什么。使用系统的,结构化的计划从头开始学习CSS是很重要的,而不是仅仅搜索来寻找一些只关注表面实践的教程。</p> <p>不幸的是,我尝试着寻找免费的在线资源来帮助你结构化、系统化的学习CSS,但并没有找到任何好的资源。现有的CSS资源要么过于技术化,并且假设你已经了解了浏览器渲染原理,要么它们只提供一些简单的技巧,而没有教给你一些有关于CSS的基本原理。</p> <p>因为没有好的资源可以让你对CSS从心里就有一个可靠的<strong>心理模型</strong>,所以很多时候碰到问题都是依赖搜索,然后复制和粘贴来解决。这使得很多人对CSS的知识都是东拼西凑的,只知道<strong>解决出现的特定的Bug就足够了</strong>,但是当面对一个看起来需要花费数小时才能修复的,又难以理解的Bug时,会立马感到完全无助。</p> <p>而且一直以来,在整个前端社区有一种不成文的理解。</p> <blockquote> <p><strong>CSS非常的简单,正因为其简单,才觉得很容易。了解它的属性就会使用</strong>。</p> </blockquote> <p>也正因这样的误导,大家觉得CSS很容易,没有任何学习成本。甚至有一些同学会认为,CSS就是手到擒来的东西。</p> <p>而我想再次表达一个不同的观点是:<strong>CSS是简单,但绝不容易</strong>:</p> <p></p> <p></p> <blockquote> <p>Unlike a programming language that requires knowledge of loops, variables, and other concepts, CSS is pretty easy to pick up. Maybe it’s because of this that it has gained the reputation of being simple. It is simple in the sense of “not complex”, but that doesn’t mean it’s easy. Mistaking “simple” for “easy” will only lead to heartache.</p> </blockquote> <p>上面罗列的一些观点不一定全对,但还是蛮有参考价值的。虽然不是什么技巧,但可以帮助我学习更多的技巧。</p> <h2 class="heading">使用<code>backdrop-filter</code>实现磨砂玻璃效果</h2> <div> See the Pen Frosted glass effect by Facundo Corradini ( @facundocorradini) on CodePen. </div> <p>磨砂玻璃的效果最早来自于苹果手机设备上的效果。</p> <p></p> <p></p> <p>早在2015年的《CSS3 Filter的十种特效》和《高级CSS filters》介绍滤镜使用的时候就知道<code>background-filter</code>这个属性。那个时候仅在Safari上才能看到效果,但从Chrome 76开始也能看到<code>background-filter</code>带来的磨砂玻璃效果。</p> <h2 class="heading">HTML的<code>output</code>元素</h2> <p>或许很多人听过<code>input</code>元素,但对于<code>output</code>元素听说过的应该很少吧。</p> <p>其实在W3C的HTML5工作草案12(2019年02月)就添加了<code>output</code>元素。在此工作草案之前,它在HTML5中被引用,直接是Web Forms 2.0中的定义。</p> <p>从HTML规范中的原始定义到现在,<code>output</code>的一些细节已经发生了变化,但是元素始终在表单元素的家族中。现在对<code>output</code>的定义从“<strong><code>output</code>元素表示计算结果</strong>”到“<strong><code>output</code>元素表示应用程序执行的计算结果或用户操作的结果</strong>”转变。</p> <p>来看一个简单的使用用例:</p> <pre><code class="copyable"><form oninput="added.value=parseInt(i1.value)+parseInt(i2.value)"> <input type="number" min="0" name="i1" value="0"> + <input type="number" min="0" name="i2" value="0"> = <output name="added">0</output> </form> <span class="copy-code-btn">复制代码</span></code></pre> <p>有关于<code>output</code>元素更多的介绍可以阅读:</p> <ul> <li><code>output</code>元素</li> <li><code>output</code>: HTML's native live region element</li> </ul> <h2 class="heading">你所不知道的<code>:not()</code></h2> <p>在《初探CSS 选择器Level 4》一文中有详细介绍过<code>:not()</code>这个函数伪类的使用。</p> <p>否定伪类<code>:not()</code>是一个函数伪类,以选择器列表做为参数,它表示的元素不是由其参数表示的。<code>:not()</code>选择器可以用来做为判断的一个选择器,好比JavaScript中的非。其主要作用就是将符合规则的元素剔除,将样式规则应用于其他元素上。事实上,在CSS Selector Level 3就有<code>:not()</code>的身影,只不过当初的功能比较弱,比如<code>:not(p)</code>用来选择不是<code><p></code>的元素。但在新版本的中,其功能变得更为强大,可以应用更为复杂的规则,但是同样地不允许嵌套使用,比如<code>:not(:not(...))</code>。</p> <p>我们平时开发项目的时候,时常会碰到列表这样的效果,列表项之间有一个<code>margin-bottom</code>,而往往想在最后一项中不设置<code>margin-bottom</code>。比如像下图这样的效果:</p> <p></p> <p></p> <p>如果要避免多个类的时候,可以将它们连接起来,因为<code>:not()</code>没有逻辑组合符的操作,所以我们可以这样做:</p> <pre><code class="copyable">body:not(.home):not(.away):not(.page-50) { } <span class="copy-code-btn">复制代码</span></code></pre> <p>前几天@张鑫旭老师在《CSS <code>:not</code>伪类可能错误的认识》一文中也详细阐述了我们对<code>:not()</code>使用时容易搞错的几个点。比如,搞不清楚其优先级、不支持复杂选择器、容易搞不清楚的否定逻辑关系等。</p> <h2 class="heading">从字符串中删除最后一个字符</h2> <p>JavaScript中<strong>从字符串中删除最后一个字符</strong>的两种方法:</p> <pre><code class="copyable">// 使用`slice` let input = "w3cplus.com" function removeLastCharacter(str){ let charcter_arr = str.split(''); return charcter_arr.slice(0, charcter_arr.length - 1).join(''); } let output = removeLastCharacter(input); console.log(`Output is ${output}`); // => Output is w3cplus.co // 使用substring方法 let input = "w3cplus.com" function removeLastCharacter(str){ return str.substring(0, str.length - 1); } let output = removeLastCharacter(input); console.log(`Output is ${output}`); // => Output is w3cplus.co <span class="copy-code-btn">复制代码</span></code></pre> <h2 class="heading">几张动图帮你更好的理解CSS Grid中的几个属性</h2> <p>这两年有关于CSS Grid Layout的相关讨论在社区中非常的火爆。强大到只需要添加一行代码就可以实现响应式的布局(一些特定场景)。</p> <p>这一行代码就是:</p> <pre><code class="copyable">grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); <span class="copy-code-btn">复制代码</span></code></pre> <p></p> <p></p> <p>代码中用到了<code>repeat()</code>、<code>auto-fit</code>、<code>minmax()</code>和<code>fr</code>。接下来用@Per 文章中的几张GIF图来向大家展示他们的作用:</p> <pre><code class="copyable"><!-- HTML --> <div class="container"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> // CSS .container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 50px 50px; } <span class="copy-code-btn">复制代码</span></code></pre> <p>看到的效果如下:</p> <p></p> <p></p> <p>把<code>100px</code>换上<code>1fr</code>:</p> <pre><code class="copyable">.container { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 50px 50px; } <span class="copy-code-btn">复制代码</span></code></pre> <p>效果如下:</p> <p></p> <p></p> <p>使用<code>repeat()</code>可以让代码更干净:</p> <pre><code class="copyable">.container { display: grid; grid-template-columns: repeat(3, 100px); grid-template-rows: repeat(2, 50px); } <span class="copy-code-btn">复制代码</span></code></pre> <p></p> <p></p> <p>使用<code>auto-fit</code>做自动填充:</p> <pre><code class="copyable">.container { display: grid; grid-gap: 5px; grid-template-columns: repeat(auto-fit, 100px); grid-template-rows: repeat(2, 100px); } <span class="copy-code-btn">复制代码</span></code></pre> <p></p> <p></p> <p>加上<code>minmax()</code>用一行代码在一些场景中就可以达到响应式效果:</p> <pre><code class="copyable">.container { display: grid; grid-gap: 5px; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); grid-template-rows: repeat(2, 100px); } <span class="copy-code-btn">复制代码</span></code></pre> <p></p> <p></p> <p>有关于<code>repeat()</code>、<code>auto-fit</code>、<code>minmax()</code>和<code>fr</code>更多的介绍,可以阅读:</p> <ul> <li>CSS Grid带来的新单位:分数单位<code>fr</code></li> <li><code>minmax()</code>函数如何工作</li> <li>Intrinsically Responsive CSS Grid with <code>minmax()</code> and <code>min()</code></li> <li>Auto-Sizing Columns in CSS Grid: <code>auto-fill</code> vs <code>auto-fit</code></li> </ul> <h2 class="heading">小结</h2> <p>文章围绕@Bill Mei的《Top 10 most deadly CSS mistakes made by new and experienced developers》进行展开。在Chrome78开始可以使用<code>backdrop-filter</code>实现磨砂玻璃的效果,HTML新增的<code>output</code>元素可以用来表示应用程序执行的计算结果或用户操作的结果;CSS的<code>:not()</code>虽然没有逻辑符来,但可以通过多操作符来组合,达到类似逻辑组合的效果。最后使用@Per制作的几张Gif图简单粗暴的告诉大家如何使用CSS Grid Layout中的<code>repeat()</code>、<code>fr</code>、<code>auto-fit</code>和<code>minmax()</code>,从而使用一行代码达到响应式的效果。常用于列表布局的场景中。</p> <p>最后,希望这一期的内容大家会喜欢。如果你有更好的建议或相关的积累,欢迎在下面的评论中与我们一起分享。</p> </div> <p>转载于:https://juejin.im/post/5d46c169e51d4562132030a0</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1306152567079735296"></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">你可能感兴趣的:(javascript,开发工具,python)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950233451282100224.htm" title="python 读excel每行替换_Python脚本操作Excel实现批量替换功能" target="_blank">python 读excel每行替换_Python脚本操作Excel实现批量替换功能</a> <span class="text-muted">weixin_39646695</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%AF%BBexcel%E6%AF%8F%E8%A1%8C%E6%9B%BF%E6%8D%A2/1.htm">读excel每行替换</a> <div>Python脚本操作Excel实现批量替换功能大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换。使用的工具Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~明确需求原始excel如下我们的目标是把下面excel工作表的sheet1表页A列的内容“替换我吧”批量替换为B列的“我用来替换的</div> </li> <li><a href="/article/1950232820773351424.htm" title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div> </li> <li><a href="/article/1950208107430866944.htm" title="python笔记14介绍几个魔法方法" target="_blank">python笔记14介绍几个魔法方法</a> <span class="text-muted">抢公主的大魔王</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> <div>python笔记14介绍几个魔法方法先声明一下各位大佬,这是我的笔记。如有错误,恳请指正。另外,感谢您的观看,谢谢啦!(1).__doc__输出对应的函数,类的说明文档print(print.__doc__)print(value,...,sep='',end='\n',file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.std</div> </li> <li><a href="/article/1950204954295726080.htm" title="Anaconda 和 Miniconda:功能详解与选择建议" target="_blank">Anaconda 和 Miniconda:功能详解与选择建议</a> <span class="text-muted">古月฿</span> <a class="tag" taget="_blank" href="/search/python%E5%85%A5%E9%97%A8/1.htm">python入门</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a> <div>Anaconda和Miniconda详细介绍一、Anaconda的详细介绍1.什么是Anaconda?Anaconda是一个开源的包管理和环境管理工具,在数据科学、机器学习以及科学计算领域发挥着关键作用。它以Python和R语言为基础,为用户精心准备了大量预装库和工具,极大地缩短了搭建数据科学环境的时间。对于那些想要快速开展数据分析、模型训练等工作的人员来说,Anaconda就像是一个一站式的“数</div> </li> <li><a href="/article/1950204701714739200.htm" title="环境搭建 | Python + Anaconda / Miniconda + PyCharm 的安装、配置与使用" target="_blank">环境搭建 | Python + Anaconda / Miniconda + PyCharm 的安装、配置与使用</a> <span class="text-muted"></span> <div>本文将分别介绍Python、Anaconda/Miniconda、PyCharm的安装、配置与使用,详细介绍Python环境搭建的全过程,涵盖Python、Pip、PythonLauncher、Anaconda、Miniconda、Pycharm等内容,以官方文档为参照,使用经验为补充,内容全面而详实。由于图片太多,就先贴一个无图简化版吧,详情请查看Python+Anaconda/Minicond</div> </li> <li><a href="/article/1950202938265759744.htm" title="你竟然还在用克隆删除?Conda最新版rename命令全攻略!" target="_blank">你竟然还在用克隆删除?Conda最新版rename命令全攻略!</a> <span class="text-muted">曦紫沐</span> <a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/1.htm">Python基础知识</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83%E7%AE%A1%E7%90%86/1.htm">虚拟环境管理</a> <div>文章摘要Conda虚拟环境管理终于迎来革命性升级!本文揭秘Conda4.9+版本新增的rename黑科技,彻底告别传统“克隆+删除”的繁琐操作。从命令解析到实战案例,手把手教你如何安全高效地重命名Python虚拟环境,附带版本检测、环境迁移、故障排查等进阶技巧,助你提升开发效率10倍!一、颠覆认知:Conda居然自带重命名功能?很多开发者仍停留在“Conda无法直接重命名环境”的认知阶段,实际上自</div> </li> <li><a href="/article/1950202054706262016.htm" title="centos7安装配置 Anaconda3" target="_blank">centos7安装配置 Anaconda3</a> <span class="text-muted"></span> <div>Anaconda是一个用于科学计算的Python发行版,Anaconda于Python,相当于centos于linux。下载[root@testsrc]#mwgethttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.shBegintodownload:Anaconda3-5.2.0-L</div> </li> <li><a href="/article/1950202054219722752.htm" title="Pandas:数据科学的超级瑞士军刀" target="_blank">Pandas:数据科学的超级瑞士军刀</a> <span class="text-muted">科技林总</span> <a class="tag" taget="_blank" href="/search/DeepSeek%E5%AD%A6AI/1.htm">DeepSeek学AI</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>**——从零基础到高效分析的进化指南**###**一、Pandas诞生:数据革命的救世主****2010年前的数据分析噩梦**:```python#传统Python处理表格数据data=[]forrowincsv_file:ifrow[3]>100androw[2]=="China":data.append(float(row[5])#代码冗长易错!```**核心痛点**:-Excel处理百万行崩</div> </li> <li><a href="/article/1950195876991397888.htm" title="【Jupyter】个人开发常见命令" target="_blank">【Jupyter】个人开发常见命令</a> <span class="text-muted">TIM老师</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Pycharm/1.htm">Pycharm</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/VSCode/1.htm">VSCode</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/Jupyter/1.htm">Jupyter</a> <div>1.查看python版本importsysprint(sys.version)2.ipynb/py文件转换jupyternbconvert--topythonmy_file.ipynbipynb转换为mdjupyternbconvert--tomdmy_file.ipynbipynb转为htmljupyternbconvert--tohtmlmy_file.ipynbipython转换为pdfju</div> </li> <li><a href="/article/1950194742100815872.htm" title="用代码生成艺术字:设计个性化海报的秘密" target="_blank">用代码生成艺术字:设计个性化海报的秘密</a> <span class="text-muted"></span> <div>本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准</div> </li> <li><a href="/article/1950194363237724160.htm" title="用 Python 开发小游戏:零基础也能做出《贪吃蛇》" target="_blank">用 Python 开发小游戏:零基础也能做出《贪吃蛇》</a> <span class="text-muted"></span> <div>本文专为零基础学习者打造,详细介绍如何用Python开发经典小游戏《贪吃蛇》。无需复杂编程知识,从环境搭建到代码编写、功能实现,逐步讲解核心逻辑与操作。涵盖Pygame库的基础运用、游戏界面设计、蛇的移动与食物生成规则等,让新手能按步骤完成开发,同时融入SEO优化要点,帮助读者轻松入门Python游戏开发,体验从0到1做出游戏的乐趣。一、为什么选择用Python开发《贪吃蛇》对于零基础学习者来说,</div> </li> <li><a href="/article/1950193733681082368.htm" title="基于Python的AI健康助手:开发与部署全攻略" target="_blank">基于Python的AI健康助手:开发与部署全攻略</a> <span class="text-muted">AI算力网络与通信</span> <a class="tag" taget="_blank" href="/search/AI%E7%AE%97%E5%8A%9B%E7%BD%91%E7%BB%9C%E4%B8%8E%E9%80%9A%E4%BF%A1%E5%8E%9F%E7%90%86/1.htm">AI算力网络与通信原理</a><a class="tag" taget="_blank" href="/search/AI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%9E%B6%E6%9E%84/1.htm">AI人工智能大数据架构</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><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>基于Python的AI健康助手:开发与部署全攻略关键词:Python、AI健康助手、机器学习、自然语言处理、Flask、部署、健康管理摘要:本文将详细介绍如何使用Python开发一个AI健康助手,从需求分析、技术选型到核心功能实现,再到最终部署上线的完整过程。我们将使用自然语言处理技术理解用户健康咨询,通过机器学习模型提供个性化建议,并展示如何用Flask框架构建Web应用接口。文章包含大量实际代</div> </li> <li><a href="/article/1950192849786040320.htm" title="AI人工智能中的数据挖掘:提升智能决策能力" target="_blank">AI人工智能中的数据挖掘:提升智能决策能力</a> <span class="text-muted"></span> <div>AI人工智能中的数据挖掘:提升智能决策能力关键词:数据挖掘、人工智能、机器学习、智能决策、数据分析、特征工程、模型优化摘要:本文深入探讨了数据挖掘在人工智能领域中的核心作用,重点分析了如何通过数据挖掘技术提升智能决策能力。文章从基础概念出发,详细介绍了数据挖掘的关键算法、数学模型和实际应用场景,并通过Python代码示例展示了数据挖掘的全流程。最后,文章展望了数据挖掘技术的未来发展趋势和面临的挑战</div> </li> <li><a href="/article/1950192217708621824.htm" title="lesson20:Python函数的标注" target="_blank">lesson20:Python函数的标注</a> <span class="text-muted">你的电影很有趣</span> <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>目录引言:为什么函数标注是现代Python开发的必备技能一、函数标注的基础语法1.1参数与返回值标注1.2支持的标注类型1.3Python3.9+的重大改进:标准集合泛型二、高级标注技巧与最佳实践2.1复杂参数结构标注2.2函数类型与回调标注2.3变量注解与类型别名三、静态类型检查工具应用3.1mypy:最流行的类型检查器3.2Pyright与IDE集成3.3运行时类型验证四、函数标注的工程价值与</div> </li> <li><a href="/article/1950190325960077312.htm" title="Jupyter Notebook:数据科学的“瑞士军刀”" target="_blank">Jupyter Notebook:数据科学的“瑞士军刀”</a> <span class="text-muted">a小胡哦</span> <a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/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/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>在数据科学的世界里,JupyterNotebook是一个不可或缺的工具,它就像是数据科学家手中的“瑞士军刀”,功能强大且灵活多变。今天,就让我们一起深入了解这个神奇的工具。一、JupyterNotebook是什么?JupyterNotebook是一个开源的Web应用程序,它允许你创建和共享包含实时代码、方程、可视化和解释性文本的文档。它支持多种编程语言,其中Python是最常用的语言之一。Jupy</div> </li> <li><a href="/article/1950187554129113088.htm" title="Django学习笔记(一)" target="_blank">Django学习笔记(一)</a> <span class="text-muted"></span> <div>学习视频为:pythondjangoweb框架开发入门全套视频教程一、安装pipinstalldjango==****检查是否安装成功django.get_version()二、django新建项目操作1、新建一个项目django-adminstartprojectproject_name2、新建APPcdproject_namedjango-adminstartappApp注:一个project</div> </li> <li><a href="/article/1950185789447008256.htm" title="Python 程序设计讲义(26):字符串的用法——字符的编码" target="_blank">Python 程序设计讲义(26):字符串的用法——字符的编码</a> <span class="text-muted">睿思达DBA_WGX</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E8%AE%B2%E4%B9%89/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>Python程序设计讲义(26):字符串的用法——字符的编码目录Python程序设计讲义(26):字符串的用法——字符的编码一、字符的编码二、`ASCII`编码三、`Unicode`编码四、使用`ord()`函数查询一个字符对应的`Unicode`编码五、使用`chr()`函数查询一个`Unicode`编码对应的字符六、`Python`字符串的特征一、字符的编码计算机默认只能处理二进制数,而不能处</div> </li> <li><a href="/article/1950183898780594176.htm" title="【Python】pypinyin-汉字拼音转换工具" target="_blank">【Python】pypinyin-汉字拼音转换工具</a> <span class="text-muted">鸟哥大大</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%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a> <div>文章目录1.主要功能2.安装3.常用API3.1拼音风格3.2核心API3.2.1pypinyin.pinyin()3.2.2pypinyin.lazy_pinyin()3.2.3pypinyin.load_single_dict()3.2.4pypinyin.load_phrases_dict()3.2.5pypinyin.slug()3.3注册新的拼音风格4.基本用法4.1库导入4.2基本汉字</div> </li> <li><a href="/article/1950183268448006144.htm" title="python编程第十四课:数据可视化" target="_blank">python编程第十四课:数据可视化</a> <span class="text-muted">小小源助手</span> <a class="tag" taget="_blank" href="/search/Python%E4%BB%A3%E7%A0%81%E5%AE%9E%E4%BE%8B/1.htm">Python代码实例</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/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>Python数据可视化:让数据“开口说话”在当今数据爆炸的时代,数据可视化已成为探索数据规律、传达数据信息的关键技术。Python凭借其丰富的第三方库,为数据可视化提供了强大而灵活的解决方案。本文将带你深入了解Matplotlib库的基础绘图、Seaborn库的高级可视化以及交互式可视化工具Plotly,帮助你通过图表清晰地展示数据背后的故事。一、Matplotlib库基础绘图Matplotlib</div> </li> <li><a href="/article/1950180118999658496.htm" title="Python数据可视化:用代码绘制数据背后的故事" target="_blank">Python数据可视化:用代码绘制数据背后的故事</a> <span class="text-muted">AAEllisonPang</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/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>引言:当数据会说话在数据爆炸的时代,可视化是解锁数据价值的金钥匙。Python凭借其丰富的可视化生态库,已成为数据科学家的首选工具。本文将带您从基础到高级,探索如何用Python将冰冷数字转化为引人入胜的视觉叙事。一、基础篇:二维可视化的艺术表达1.1Matplotlib:可视化领域的瑞士军刀importmatplotlib.pyplotaspltimportnumpyasnpx=np.linsp</div> </li> <li><a href="/article/1950179614320029696.htm" title="python学习笔记(汇总)" target="_blank">python学习笔记(汇总)</a> <span class="text-muted">朕的剑还未配妥</span> <a class="tag" taget="_blank" href="/search/python%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E6%95%B4%E7%90%86/1.htm">python学习笔记整理</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/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>文章目录一.基础知识二.python中的数据类型三.运算符四.程序的控制结构五.列表六.字典七.元组八.集合九.字符串十.函数十一.解决bug一.基础知识print函数字符串要加引号,数字可不加引号,如print(123.4)print('小谢')print("洛天依")还可输入表达式,如print(1+3)如果使用三引号,print打印的内容可不在同一行print("line1line2line</div> </li> <li><a href="/article/1950175199089455104.htm" title="PDF转Markdown - Python 实现方案与代码" target="_blank">PDF转Markdown - Python 实现方案与代码</a> <span class="text-muted">Eiceblue</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/PDF/1.htm">PDF</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</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><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a> <div>PDF作为广泛使用的文档格式,转换为轻量级标记语言Markdown后,可无缝集成到技术文档、博客平台和版本控制系统中,提高内容的可编辑性和可访问性。本文将详细介绍如何使用国产Spire.PDFforPython库将PDF文档转换为Markdown格式。技术优势:精准保留原始文档结构(段落/列表/表格)完整提取文本和图像内容无需Adobe依赖的纯Python实现支持Linux/Windows/mac</div> </li> <li><a href="/article/1950174441992417280.htm" title="使用Python和Gradio构建实时数据可视化工具" target="_blank">使用Python和Gradio构建实时数据可视化工具</a> <span class="text-muted">PythonAI编程架构实战家</span> <a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/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><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>使用Python和Gradio构建实时数据可视化工具关键词:Python、Gradio、数据可视化、实时数据、Web应用、交互式界面、数据科学摘要:本文将详细介绍如何使用Python和Gradio框架构建一个实时数据可视化工具。我们将从基础概念开始,逐步深入到核心算法实现,包括数据处理、可视化技术以及Gradio的交互式界面设计。通过实际项目案例,读者将学习如何创建一个功能完整、响应迅速的实时数据</div> </li> <li><a href="/article/1950174315609649152.htm" title="Python Gradio:实现交互式图像编辑" target="_blank">Python Gradio:实现交互式图像编辑</a> <span class="text-muted">PythonAI编程架构实战家</span> <a class="tag" taget="_blank" href="/search/Python%E7%BC%96%E7%A8%8B%E4%B9%8B%E9%81%93/1.htm">Python编程之道</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><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>PythonGradio:实现交互式图像编辑关键词:Python,Gradio,交互式图像编辑,计算机视觉,深度学习,图像处理,Web应用摘要:本文将深入探讨如何使用Python的Gradio库构建交互式图像编辑应用。我们将从基础概念开始,逐步介绍Gradio的核心功能,并通过实际代码示例展示如何实现各种图像处理功能。文章将涵盖图像滤镜应用、对象检测、风格迁移等高级功能,同时提供完整的项目实战案例</div> </li> <li><a href="/article/1950174063116742656.htm" title="数据可视化:数据世界的直观呈现" target="_blank">数据可视化:数据世界的直观呈现</a> <span class="text-muted">卢政权1</span> <a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a> <div>在当今数字化浪潮中,数据呈爆炸式增长。数据可视化作为一种强大的技术手段,能够将复杂的数据转化为直观的图形、图表等形式,让数据背后的信息一目了然。无论是在商业决策、科学研究还是日常数据分析中,数据可视化都发挥着极为重要的作用。它帮助我们快速理解数据的分布、趋势、关联等特征,从而为进一步的分析和行动提供有力支持。接下来,我们将深入探讨数据可视化的奥秘,并通过代码示例展示其实际应用。一、Python数据</div> </li> <li><a href="/article/1950172300749893632.htm" title="Python 程序设计讲义(25):循环结构——嵌套循环" target="_blank">Python 程序设计讲义(25):循环结构——嵌套循环</a> <span class="text-muted"></span> <div>Python程序设计讲义(25):循环结构——嵌套循环目录Python程序设计讲义(25):循环结构——嵌套循环一、嵌套循环的执行流程二、嵌套循环对应的几种情况1、内循环和外循环互不影响2、外循环迭代影响内循环的条件3、外循环迭代影响内循环的循环体嵌套循环是指在一个循环体中嵌套另一个循环。while循环中可以嵌入另一个while循环或for循环。反之,也可以在for循环中嵌入另一个for循环或wh</div> </li> <li><a href="/article/1950166498563649536.htm" title="基于Python引擎的PP-OCR模型库推理" target="_blank">基于Python引擎的PP-OCR模型库推理</a> <span class="text-muted">张欣-男</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ocr/1.htm">ocr</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/PaddleOCR/1.htm">PaddleOCR</a><a class="tag" taget="_blank" href="/search/PaddlePaddle/1.htm">PaddlePaddle</a> <div>基于Python引擎的PP-OCR模型库推理1.文本检测模型推理#下载超轻量中文检测模型:wgethttps://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tartarxfch_PP-OCRv3_det_infer.tarpython3tools/infer/predict_det.py--image_dir=".</div> </li> <li><a href="/article/1950158807220940800.htm" title="一个开源AI牛马神器 | AiPy,平替Manus,装完直接上手写Python!" target="_blank">一个开源AI牛马神器 | AiPy,平替Manus,装完直接上手写Python!</a> <span class="text-muted">Agent加载失败</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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a> <div>还记得三个月前那个在闲鱼被炒到万元邀请码的Manus吗?现在你点官网,直接提示「所在地区不可用」了它走了,但更香的国产开源项目出现了:AiPy(爱派)。主打一个极致简化的AIAgent理念:别搞什么插件市场、Agent路由,直接给AI一个Python解释器,让它用自然语言写代码干活。听起来狠活?实际体验更狠:•完全本地化,界面傻瓜式操作,支持自然语言生成&执行Python任务;•数据清洗、文档总结</div> </li> <li><a href="/article/1950158303287898112.htm" title="零数学基础理解AI核心概念:梯度下降可视化实战" target="_blank">零数学基础理解AI核心概念:梯度下降可视化实战</a> <span class="text-muted">九章云极AladdinEdu</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/gpu%E7%AE%97%E5%8A%9B/1.htm">gpu算力</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/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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/opencv/1.htm">opencv</a> <div>点击“AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。用Python动画演示损失函数优化过程,数学公式具象化读者收获:直观理解模型训练本质,破除"数学恐惧症"当盲人登山者摸索下山路径时,他本能地运用了梯度下降算法。本文将用动态可视化技术,让你像感受重力一样理解AI训练的核心原理——无需任何数学公式推导。一、梯度下降:AI世界的"万有</div> </li> <li><a href="/article/1950144218282389504.htm" title="为什么学习Web前端一定要掌握JavaScript?" target="_blank">为什么学习Web前端一定要掌握JavaScript?</a> <span class="text-muted">web前端学习指南</span> <div>为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。</div> </li> <li><a href="/article/96.htm" title="怎么样才能成为专业的程序员?" target="_blank">怎么样才能成为专业的程序员?</a> <span class="text-muted">cocos2d-x小菜</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a> <div>  如何要想成为一名专业的程序员?仅仅会写代码是不够的。从团队合作去解决问题到版本控制,你还得具备其他关键技能的工具包。当我们询问相关的专业开发人员,那些必备的关键技能都是什么的时候,下面是我们了解到的情况。   关于如何学习代码,各种声音很多,然后很多人就被误导为成为专业开发人员懂得一门编程语言就够了?!呵呵,就像其他工作一样,光会一个技能那是远远不够的。如果你想要成为</div> </li> <li><a href="/article/223.htm" title="java web开发 高并发处理" target="_blank">java web开发 高并发处理</a> <span class="text-muted">BreakingBad</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%B9%B6%E5%8F%91/1.htm">并发</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a><a class="tag" taget="_blank" href="/search/%E5%A4%84%E7%90%86/1.htm">处理</a><a class="tag" taget="_blank" href="/search/%E9%AB%98/1.htm">高</a> <div>java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用,数据库的响应是首先要解决的。 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(</div> </li> <li><a href="/article/350.htm" title="mysql批量更新" target="_blank">mysql批量更新</a> <span class="text-muted">ekian</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>mysql更新优化: 一版的更新的话都是采用update set的方式,但是如果需要批量更新的话,只能for循环的执行更新。或者采用executeBatch的方式,执行更新。无论哪种方式,性能都不见得多好。 三千多条的更新,需要3分多钟。 查询了批量更新的优化,有说replace into的方式,即: replace into tableName(id,status) values</div> </li> <li><a href="/article/477.htm" title="微软BI(3)" target="_blank">微软BI(3)</a> <span class="text-muted">18289753290</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E8%BD%AFBI+SSIS/1.htm">微软BI SSIS</a> <div>1) Q:该列违反了完整性约束错误;已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80004005 说明:“不能将值 NULL 插入列 'FZCHID',表 'JRB_EnterpriseCredit.dbo.QYFZCH';列不允许有 Null 值。INSERT 失败。”。 A:一般这类问题的存在是 </div> </li> <li><a href="/article/604.htm" title="Java中的List" target="_blank">Java中的List</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>        List是一个有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。         与 set 不同,列表通常允许重复</div> </li> <li><a href="/article/731.htm" title="读书笔记" target="_blank">读书笔记</a> <span class="text-muted">永夜-极光</span> <a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a> <div>   1.  K是一家加工厂,需要采购原材料,有A,B,C,D 4家供应商,其中A给出的价格最低,性价比最高,那么假如你是这家企业的采购经理,你会如何决策?          传统决策: A:100%订单  B,C,D:0%     &nbs</div> </li> <li><a href="/article/858.htm" title="centos 安装 Codeblocks" target="_blank">centos 安装 Codeblocks</a> <span class="text-muted">随便小屋</span> <a class="tag" taget="_blank" href="/search/codeblocks/1.htm">codeblocks</a> <div>1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可yum install gccyum install gcc-c++   2.安装gtk2-devel,因为默认已经安装了正式产品需要的支持库,但是没有安装开发所需要的文档.yum install gtk2* 3. 安装wxGTK    yum search w</div> </li> <li><a href="/article/985.htm" title="23种设计模式的形象比喻" target="_blank">23种设计模式的形象比喻</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>1、ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory   工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:</div> </li> <li><a href="/article/1112.htm" title="开发管理 CheckLists" target="_blank">开发管理 CheckLists</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E7%AE%A1%E7%90%86+CheckLists/1.htm">开发管理 CheckLists</a> <div>开发管理 CheckLists(23) -使项目组度过完整的生命周期 开发管理 CheckLists(22) -组织项目资源 开发管理 CheckLists(21) -控制项目的范围开发管理 CheckLists(20) -项目利益相关者责任开发管理 CheckLists(19) -选择合适的团队成员开发管理 CheckLists(18) -敏捷开发 Scrum Master 工作开发管理 C</div> </li> <li><a href="/article/1239.htm" title="js实现切换" target="_blank">js实现切换</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E6%A0%8F%E7%9B%AE%E5%88%87%E6%8D%A2/1.htm">栏目切换</a> <div>js主要功能之一就是实现页面的特效,窗体的切换可以减少页面的大小,被门户网站大量应用思路: 1,先将要显示的设置为display:bisible 否则设为none 2,设置栏目的id ,js获取栏目的id,如果id为Null就设置为显示 3,判断js获取的id名字;再设置是否显示   代码实现:   html代码: <di</div> </li> <li><a href="/article/1366.htm" title="周鸿祎在360新员工入职培训上的讲话" target="_blank">周鸿祎在360新员工入职培训上的讲话</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%82%9F/1.htm">感悟</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA/1.htm">职场</a> <div>        这篇文章也是最近偶尔看到的,考虑到原博客发布者可能将其删除等原因,也更方便个人查找,特将原文拷贝再发布的。“学东西是为自己的,不要整天以混的姿态来跟公司博弈,就算是混,我觉得你要是能在混的时间里,收获一些别的有利于人生发展的东西,也是不错的,看你怎么把握了”,看了之后,对这句话记忆犹新。  &</div> </li> <li><a href="/article/1493.htm" title="前端Web开发的页面效果" target="_blank">前端Web开发的页面效果</a> <span class="text-muted">Bill_chen</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Microsoft/1.htm">Microsoft</a> <div>1.IE6下png图片的透明显示: <img src="图片地址" border="0" style="Filter.Alpha(Opacity)=数值(100),style=数值(3)"/> 或在<head></head>间加一段JS代码让透明png图片正常显示。 2.<li>标</div> </li> <li><a href="/article/1620.htm" title="【JVM五】老年代垃圾回收:并发标记清理GC(CMS GC)" target="_blank">【JVM五】老年代垃圾回收:并发标记清理GC(CMS GC)</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/1.htm">垃圾回收</a> <div>  CMS概述 并发标记清理垃圾回收(Concurrent Mark and Sweep GC)算法的主要目标是在GC过程中,减少暂停用户线程的次数以及在不得不暂停用户线程的请夸功能,尽可能短的暂停用户线程的时间。这对于交互式应用,比如web应用来说,是非常重要的。   CMS垃圾回收针对新生代和老年代采用不同的策略。相比同吞吐量垃圾回收,它要复杂的多。吞吐量垃圾回收在执</div> </li> <li><a href="/article/1747.htm" title="Struts2技术总结" target="_blank">Struts2技术总结</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/struts2/1.htm">struts2</a> <div>  必备jar文件 早在struts2.0.*的时候,struts2的必备jar包需要如下几个: commons-logging-*.jar   Apache旗下commons项目的log日志包 freemarker-*.jar          </div> </li> <li><a href="/article/1874.htm" title="Jquery easyui layout应用注意事项" target="_blank">Jquery easyui layout应用注意事项</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</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/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/layout/1.htm">layout</a> <div>在jquery easyui中提供了easyui-layout布局,他的布局比较局限,类似java中GUI的border布局。下面对其使用注意事项作简要介绍:      如果在现有的工程中前台界面均应用了jquery easyui,那么在布局的时候最好应用jquery eaysui的layout布局,否则在表单页面(编辑、查看、添加等等)在不同的浏览器会出</div> </li> <li><a href="/article/2001.htm" title="java-拷贝特殊链表:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?" target="_blank">java-拷贝特殊链表:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class CopySpecialLinkedList { /** * 题目:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表? 拷贝pNext指针非常容易,所以题目的难点是如何拷贝pRand指针。 假设原来链表为A1 -> A2 ->... -> An,新拷贝</div> </li> <li><a href="/article/2128.htm" title="color" target="_blank">color</a> <span class="text-muted">Chen.H</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">    <HTML>    <HEAD>&nbs</div> </li> <li><a href="/article/2255.htm" title="[信息与战争]移动通讯与网络" target="_blank">[信息与战争]移动通讯与网络</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>      两个坚持:手机的电池必须可以取下来                光纤不能够入户,只能够到楼宇       建议大家找这本书看看:<&</div> </li> <li><a href="/article/2382.htm" title="oracle flashback query(闪回查询)" target="_blank">oracle flashback query(闪回查询)</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/flashback+query/1.htm">flashback query</a><a class="tag" taget="_blank" href="/search/flashback+table/1.htm">flashback table</a> <div>在Oracle 10g中,Flash back家族分为以下成员: Flashback Database Flashback Drop Flashback Table Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query) 下面介绍一下Flashback Drop 和Flas</div> </li> <li><a href="/article/2509.htm" title="zeus持久层DAO单元测试" target="_blank">zeus持久层DAO单元测试</a> <span class="text-muted">deng520159</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a> <div>zeus代码测试正紧张进行中,但由于工作比较忙,但速度比较慢.现在已经完成读写分离单元测试了,现在把几种情况单元测试的例子发出来,希望有人能进出意见,让它走下去. 本文是zeus的dao单元测试: 1.单元测试直接上代码   package com.dengliang.zeus.webdemo.test; import org.junit.Test; import o</div> </li> <li><a href="/article/2636.htm" title="C语言学习三printf函数和scanf函数学习" target="_blank">C语言学习三printf函数和scanf函数学习</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/printf/1.htm">printf</a><a class="tag" taget="_blank" href="/search/scanf/1.htm">scanf</a><a class="tag" taget="_blank" href="/search/language/1.htm">language</a> <div>printf函数 /* 2013年3月10日20:42:32 地点:北京潘家园 功能: 目的: 测试%x %X %#x %#X的用法 */ # include <stdio.h> int main(void) { printf("哈哈!\n"); // \n表示换行 int i = 10; printf</div> </li> <li><a href="/article/2763.htm" title="那你为什么小时候不好好读书?" target="_blank">那你为什么小时候不好好读书?</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/life/1.htm">life</a> <div>dady, 我今天捡到了十块钱, 不过我还给那个人了 good girl! 那个人有没有和你讲thank you啊 没有啦....他拉我的耳朵我才把钱还给他的, 他哪里会和我讲thank you   爸爸, 如果地上有一张5块一张10块你拿哪一张呢.... 当然是拿十块的咯... 爸爸你很笨的, 你不会两张都拿   爸爸为什么上个月那个人来跟你讨钱, 你告诉他没</div> </li> <li><a href="/article/2890.htm" title="iptables开放端口" target="_blank">iptables开放端口</a> <span class="text-muted">Fanyucai</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/iptables/1.htm">iptables</a><a class="tag" taget="_blank" href="/search/%E7%AB%AF%E5%8F%A3/1.htm">端口</a> <div>1,找到配置文件 vi /etc/sysconfig/iptables   2,添加端口开放,增加一行,开放18081端口 -A INPUT -m state --state NEW -m tcp -p tcp --dport 18081 -j ACCEPT   3,保存 ESC :wq!   4,重启服务 service iptables </div> </li> <li><a href="/article/3017.htm" title="Ehcache(05)——缓存的查询" target="_blank">Ehcache(05)——缓存的查询</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F/1.htm">排序</a><a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/%E7%BB%9F%E8%AE%A1/1.htm">统计</a><a class="tag" taget="_blank" href="/search/query/1.htm">query</a> <div>缓存的查询 目录 1.    使Cache可查询 1.1     基于Xml配置 1.2     基于代码的配置 2     指定可搜索的属性 2.1     可查询属性类型 2.2 &</div> </li> <li><a href="/article/3144.htm" title="通过hashset找到数组中重复的元素" target="_blank">通过hashset找到数组中重复的元素</a> <span class="text-muted">jackyrong</span> <a class="tag" taget="_blank" href="/search/hashset/1.htm">hashset</a> <div>  如何在hashset中快速找到重复的元素呢?方法很多,下面是其中一个办法: int[] array = {1,1,2,3,4,5,6,7,8,8}; Set<Integer> set = new HashSet<Integer>(); for(int i = 0</div> </li> <li><a href="/article/3271.htm" title="使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL" target="_blank">使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL</a> <span class="text-muted">lanrikey</span> <a class="tag" taget="_blank" href="/search/history/1.htm">history</a> <div>后退时关闭当前页面 <script type="text/javascript"> jQuery(document).ready(function ($) {         if (window.history && window.history.pushState) {</div> </li> <li><a href="/article/3398.htm" title="应用程序的通信成本" target="_blank">应用程序的通信成本</a> <span class="text-muted">netkiller.github.com</span> <a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/%E9%99%88%E6%99%AF%E5%B3%B0/1.htm">陈景峰</a><a class="tag" taget="_blank" href="/search/netkiller/1.htm">netkiller</a><a class="tag" taget="_blank" href="/search/neo/1.htm">neo</a> <div>应用程序的通信成本 什么是通信 一个程序中两个以上功能相互传递信号或数据叫做通信。 什么是成本 这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间是指传递过程耗费容量大小。 都有哪些通信方式 全局变量 线程间通信 共享内存 共享文件 管道 Socket 硬件(串口,USB) 等等 全局变量 全局变量是成本最低通信方法,通过设置</div> </li> <li><a href="/article/3525.htm" title="一维数组与二维数组的声明与定义" target="_blank">一维数组与二维数组的声明与定义</a> <span class="text-muted">恋洁e生</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">一维数组</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E4%B9%89/1.htm">定义</a><a class="tag" taget="_blank" href="/search/%E5%A3%B0%E6%98%8E/1.htm">声明</a><a class="tag" taget="_blank" href="/search/%E5%88%9D%E5%A7%8B%E5%8C%96/1.htm">初始化</a> <div>/**  *  */ package test20111005; /**  * @author FlyingFire  * @date:2011-11-18 上午04:33:36  * @author :代码整理  * @introduce :一维数组与二维数组的初始化  *summary:  */ public c</div> </li> <li><a href="/article/3652.htm" title="Spring Mybatis独立事务配置" target="_blank">Spring Mybatis独立事务配置</a> <span class="text-muted">toknowme</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>在项目中有很多地方会使用到独立事务,下面以获取主键为例   (1)修改配置文件spring-mybatis.xml  <!-- 开启事务支持 -->  <tx:annotation-driven transaction-manager="transactionManager" />   &n</div> </li> <li><a href="/article/3779.htm" title="更新Anadroid SDK Tooks之后,Eclipse提示No update were found" target="_blank">更新Anadroid SDK Tooks之后,Eclipse提示No update were found</a> <span class="text-muted">xp9802</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>使用Android SDK Manager 更新了Anadroid SDK Tooks 之后, 打开eclipse提示 This Android SDK requires Android Developer Toolkit version 23.0.0 or above, 点击Check for Updates  检测一会后提示 No update were found  </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>