程序员工资是否被高估

thbcm阅读(207)

最近几年,IT 行业流行一句话,要嫁就嫁程序员,为什么呢?钱多。我们从网上的招聘网站,或者一些职场人士的口中知道一些程序员的工资比较高,或者是相对其他行业来说,工资会高一点。但是,程序员你的工资是否被高估了?我们来看一组数据:

《2018年中国程序员生存状况报告》

根据程序员客栈所做的《2018年中国程序员生存状况报告》,年薪 5w 以下的程序员仅占 6.2%,且年龄都在 25 岁以下,工作年限只有 1-2 年;大多数程序员年薪在 9-30w,平均月薪达到 10k 以上,这相比于其他行业已算是高薪;年薪 40万 以上平均年龄为 36 岁。想做程序员?先读个计算机硕士再说

从 100offer 程序员求职者的学历背景来看,本科及本科以上的程序员占了绝大多数,专科学历的程序员少之又少。虽然也有一些专科背景的候选人靠着后天的努力实现逆袭,但是毕竟凤毛麟角。可以说,本科只是「基准」,硕士及硕士以上才算「标配」。

我们截取了某个招聘网站的截图,以北京为例,3-5 年开发经验,普遍在 20k 以上,即便应届毕业生也基本都在 10k 左右徘徊。相对于其它行业,互联网的薪水的确会显得相对高点儿。

但是,在现实生活中,高薪资的程序员的工作根本就不是人们平时想象中的那么轻松和自由。

1、程序员是脑力与体力的双重折磨他们每天都要熬通宵打代码,只能一直坐在电脑前,由于长期的熬夜,身体状况已经大不如从前,在最近几年也是经常能看到码农猝死的新闻,一大部分的原因和工作习惯有关。甚至因为长时间的工作,有些人到了三十五岁还没有对象。另外,有一种东西叫加班,很多人并不能扛住长期加班,或许有人会说【那转管理就好啦】,但是,一个公司的管理也不需要太多,一到两个够用,需要的是开发,需要的是写代码的程序员。程序员,要么在加班,要么就在加班的路上。别人都睡的时候他回来了,别人都没起的时候他去上班了。这种现象在开发行业太常见了。
2、优秀和平庸,工资也是衡量指标技术每年都在变,三年一大变,一年一小变,你可以看到每隔几年出来一个新语言火遍 IT 界,前端每隔一段时间出来一个新框架。程序员和别的行业有个非常大的区别,程序员越老,反而越不吃香,新出的技术,年纪越大,越学不进去,在这门语言或技术上积累的经验,可能就在这几年的时间内有用。换了语言,就要重新学习,而这也和自己的工资挂钩,也就是说,工资体现了你的能力,你的优秀或平庸。
3、程序员都是“虚高要价”的在外行人看来,可能不觉得程序员值钱。因为【代码,网上有的是,你帮我下载个改改就行。】【你能不能帮我做个类似微信聊天的 app,很简单,就跟微信一样】诸如此类的事情经常发生。还有一种程序员叫做流水线上出来的程序员,也就是我们常说的培训机构出来的。恰恰是这些流水线上出来的程序员,要价高,基础差,能力差,给市场造成一种错觉,程序员都是虚高要价的。
4、35 岁是程序员的一道坎有网友说,【这个工资水平真的已经很高了】。但是,如果在 35 岁还没有升职的话就会面临下岗的问题,没有什么道理可讲的,只是因为现在学 IT 的人太多了。看一组数据:百度平均年龄 26 岁阿里平均年龄 28 岁腾讯平均年龄 27 岁华为平均年龄 29 岁就算是普通的本科毕业生,毕业年龄大多是在 24 岁,工作 5 年后,就开始处于拖后腿的状态了。当进入到 35~40 岁的时候,大多数人想要稳定下来,但是却再也没有机会去抓住新的机遇了,因为你可能竞争不过刚刚毕业的应届生。


总结:程序员工资,我认为是一点都不高。无论哪个行业,都有它自身的发展机会。无论你在哪个行业,只要你能做的很优秀,在哪个行业都有能够得到高薪收入。很多时候我们不应该片面的去解读程序员,无论是哪个行业,都需要积累自己的经验,在行业里面沉淀。

转载自:菜鸟学Python

以上就是小编为大家整理的关于 程序员工资是否被高估 的全部内容。

学c语言用什么书?零基础看什么书?

thbcm阅读(183)

C 语言的历史已经非常久了,相关的书也非常的多,很多刚开始学习 C 语言的朋友都很迷茫,面对这么多的书无从下手,那么学 C 语言用什么书呢?那些是适合零基础初学者到进阶看的呢?今天 W3Cschool 小编就来和大家分享一下自己整理的相关书单。

《C语言大全第4版》,这本书非常适合初学者,从 C 语言的历史开始一步步深入,初学者能够从根本上对 C 语言进行了解,有利于后期的深入学习。

《C程序设计语言》,这本书篇幅不长,C 语言有些书长达上千页,但这本书相对来说简练的多,适合有一定实操经验的人,可以更加全面的理解 C 语言、巩固 C 语言基础,不适合初学者首次购买建议第二本第三本购入。

《C和指针》,这本书的名称看似针对指针,实际上把 C 语言和 C 语言的运行环境都非常系统的讲了一遍。很多编译器的实现过程都有详细介绍,非常适合进阶学习。

《C专家编程》,这本书也很多人推荐,趣味性比其它书要强很多,里面有不少 C 语言相关的八卦趣事,作为补充了解挺不错的。

各位学 C 语言用什么书的困惑是不是已经解除了呢?有兴趣深入学习的朋友可以到我们的C语言学习专栏进行学习。

Spring是什么?

thbcm阅读(194)

后端开发中,有个名词经常被提到,那就是 Spring。很多开发小白可能对这个有点陌生,那么今天这篇文章 w3cschool 小编就来介绍下 Spring 是什么。

Spring概念

Spring 是一个轻量级的 Java 应用程序开发框架,最初由 Rod Johnson 编写并于 2003 年 6 月发布。Spring 以其编写出的代码性能好、易于测试、可重用性高等特性备受世界各国开发人员的喜爱。

spring 入门微课

Spring 的特点

使开发更为简单,方便解耦。

可以对程序进行拦截、监控、运行等操作。

可以对事务进行声明。

已封装的框架可与其他框架一起使用。

以上就是 w3cschool 小编为大家介绍的 Spring 是什么的全部内容,更多 Spring 学习内容,请关注 w3cschool 官网。

AI编程语言Python之父重入职场加入微软:退休太无聊

thbcm阅读(197)

职场“打工人”的新标杆:因为退休生活太无聊,编程语言Python之父选择重回职场。

当地时间11月12日, 64岁的 Python 之父 Guido van Rossum 在自己的官方宣布:由于退休生活太无聊,自己决定加入微软的开发部门。至于要做什么,他表示有太多要做的,将致力于让 Python 变得更好用(不仅仅是在 Windows 上),微软这里有很多开源资源,值得关注。

微软方面也确认了 Guido van Rossum 的加入。“我们很高兴能将他加入开发者部门。微软致力于为 Python 社区做出贡献,并与之一起成长,而 Guido 的入职就是这一承诺的体现。”微软发言人也在推特上表示。

提到 Guido van Rossum 的“神迹”,需要追溯到上世纪 80 年代末。彼时,他还在荷兰国家数学和计算机科学研究中心的 CWI 部门开发分布式系统。因为对当时已有的编程语言感到十分失望,于是决定亲自下场开发一门既易于使用功能又强大的语言。仅用了 3 个月的时间,他就开发了 Python 原型。

至于为什么命名为 Python ?据了解,Guido van Rossum 是受到喜剧团体 “Monty Python”的启发,他还根据自己的喜好制定了一个巨蟒的 logo。

到了上世纪 90 年代中期,Guido van Rossum在美国国家标准技术研究院及之后的多家公司中积极从事该语言的工作,包括担任 Python Labs 的主管等。

也是在 90 年代,Python 开始受到各方关注。就这样,原本属于van Rossum 自己的个人项目成为了世界上最受欢迎的编程语言之一。

值得一提的是,在 Python 语言社区里,Guido van Rossum一度拥有社区最高决策权,被称为终身仁慈独裁者(BDFL)。2018年,Guido van Rossum辞去了 Python 的 BDFL 职位,但仍然活跃在 Python 开发圈中。他还是 Python 软件基金会的负责人,这个基金会负责监督 Python 语言。

除了在 Python 语言社区的建树外,Guido van Rossum 的职业生涯中还服务过多家公司,包括 Zope、BeOpen。2005 年他加入谷歌,为谷歌开发了内部代码审查工具 Mondrian,并致力于App Engine。据了解,在谷歌工作时他把一半的时间都用来维护 Python 的开发。2012 年从谷歌离职后,他又加入了个人云存储公司Dropbox。

得益于机器学习 的发展,Python 如今已经成为了世界上最流行的编程语言之一,近几年的发展势头依然迅猛。

至于微软,多年来,由于“非我发明(Not invented here)”的态度,微软对 Python 并没有表现出太大的兴趣。但随着微软更多地与开源社区和云技术合作,公司逐渐改变了态度。

(文章来源:澎湃新闻)

Javascript怎么在两个窗体之间传值

thbcm阅读(194)

众所周知 window.open() 函数可以用来打开一个新窗口,那么如何在子窗体中向父窗体传值呢,其实通过 window.opener 即可获取父窗体的引用。

如我们新建窗体 FatherPage.htm:

XML-Code:

<script type="text/javascript">
function OpenChildWindow(){ 
window.open('ChildPage.htm'); }
</script>
<input type="text" id="txtInput" />
<input type="button" value="OpenChild" onclick="OpenChildWindow()" />

然后在 ChildPage.htm 中即可通过 window.opener 来访问父窗体中的元素:

XML-Code:

<script type="text/javascript">
function SetValue(){ 
window.opener.document.getElementById('txtInput').value =document.getElementById('txtInput').value; 
window.close();}
</script>
<input type="text" id="txtInput" />
<input type="button" value="SetFather" onclick="SetValue()" />

其实在打开子窗体的同时,我们也可以对子窗体的元素进行赋值,因为 window.open 函数同样会返回一个子窗体的引用,因此 FatherPage.htm 可以修改为:

XML-Code:

<script type="text/javascript">
function OpenChildWindow(){ 
var child = window.open('ChildPage.htm'); 
child.document.getElementById('txtInput').value =document.getElementById('txtInput').value; }
</script>
<input type="text" id="txtInput"/>
<input type="button" value="OpenChild" onclick="OpenChildWindow()" />

通过判断子窗体的引用是否为空,我们还可以控制使其只能打开一个子窗体:

XML-Code:

<script type="text/javascript">
var childfunction OpenChildWindow(){ 
if(!child) child = window.open('ChildPage.htm'); 
child.document.getElementById('txtInput').value =document.getElementById('txtInput').value; }
</script>
<input type="text" id="txtInput" />
<input type="button" value="OpenChild" onclick="OpenChildWindow()" />

光这样还不够,当关闭子窗体时还必须对父窗体的child变量进行清空,否则打开子窗体后再关闭就无法再重新打开了:

XML-Code:

<body onunload="Unload()">
<script type="text/javascript">
function SetValue(){ 
window.opener.document.getElementById('txtInput').value =document.getElementById('txtInput').value; 
window.close();}
function Unload(){ 
window.opener.child=null;}
</script>
<input type="text" id="txtInput" />
<input type="button" value="SetFather" onclick="SetValue()" />
</body>

2020 年度 Python 库 Top 10 榜单

thbcm阅读(194)

2020年最热门的Python库有哪些?评判规则很简单。小编为大家寻找的库满足以下条件:

  • 它于2020年推出或普及。
  • 自发布以来,一直得到很好的维护。
  • 它非常酷,您应该使用一下它。

免责声明:我们的选择在很大程度上受机器学习/数据科学库的影响,尽管其中某些库确实对非数据科学人士也同样受用。

推荐好课:Python3进阶:数据分析及可视化Keras 深度学习入门与实战

这篇文章的精神是使这些库更为大众所知,因此,事不宜迟,让我们开始吧。

1、Typer

您不一定总是需要编写 CLI 应用程序,但这样做可以省不少事。在 FastAPI(https://fastapi.tiangolo.com/) 取得巨大成功之后,tiangolo (https://twitter.com/tiangolo) 使用了相同的原理为我们带来了 Typer:一个新的库,使您可以利用Python 3.6+的类型提示功能来编写命令行界面。

该设计的确使Typer脱颖而出。除了确保代码已正确记录之外,您还可以轻松进行CLI界面的验证。通过使用类型提示,您可以在Python编辑器(如VS Code)中获得自动补全功能,这将提高您的生产率。

为了增强其功能,Typer内核是基于Click(https://click.palletsprojects.com/en/7.x/)的,而Click则是众所周知,并且经过了严格的测试。这意味着它可以利用其所有好处,如社区和插件,同时以更少的样板代码从简单开始,并根据需要变得复杂。

Typer文档(https://typer.tiangolo.com/)确实很有帮助,并且应该成为其他项目的典范。绝对不能错过!

2. Rich

顺着CLI的主题,谁说终端应用程序必须是纯白色,或者如果您是真正的黑客,则必须是绿色,是黑色?

是否要在终端输出中添加颜色和样式?毫不费力地显示漂亮的进度条?Markdown?表情符号?Rich可以实现上述所有功能。查看下面示例截图可以进一步了解:

Rich 绝对是一个可以将使用终端应用程序的体验提升到全新水平的库。

3. Dear PyGui

尽管如我们所见,终端应用程序可以很漂亮,但有时还不够,您需要一个真正的GUI。目前流行的Dear ImGui C ++项目(https://github.com/ocornut/imgui)的Python分支Dear PyGui正是为此而诞生。

Dear PyGui利用了在视频游戏中广为流行的即时模式范例(immediate mode paradigm)。这基本上意味着动态GUI是逐帧独立绘制的,无需保留任何数据。这使得该工具与其他Python GUI框架有着根本不同。它具有高性能,并使用计算机的GPU来促进高度动态界面的构建,这在工程,仿真,游戏或数据科学应用程序中经常用到。

Dear PyGui可以在没有陡峭的学习曲线的情况下使用,并且可以在Windows 10(DirectX 11),Linux(OpenGL 3)和MacOS(Metal)上运行。

4. PrettyErrors

大道至简,这是一个值得让您思考的库:以前没人想过这是怎么回事?

PrettyErrors只做一件事并且做得很好。在支持彩色输出的终端中,它将隐秘的堆栈轨迹转换成更适合用微弱的人眼解析的东西。无需再扫描整个屏幕来查找异常的原因……您现在就可以一目了然!

5. Diagrams

我们程序员喜欢用代码解决问题。但是有时,我们需要向其他同事解释复杂的架构设计。传统上,我们使用GUI工具,在其中我们可以处理图表和可视化以放入演示文稿和文档。但这不是唯一的方法。

Diagrams使您无需任何设计工具即可直接在Python代码中绘制云系统架构。它包含的图标支持多个云提供商(包括AWS,Azure,GCP)。这使创建箭头和组非常容易。真的,只有几行代码!

基于代码的图表的最好之处是什么?您可以通过git使用版本控制来掌控进度!

6. HydraOmegaConf

在进行机器学习项目的研究和实验时,总是有无数的设置可以尝试。在非平凡解的应用程序中,配置管理会变得相当复杂,非常快。有一种结构化的方式来处理这种复杂性不是很好吗?

Hydra是一种工具,可让您以可组合的方式构建配置,并从命令行或配置文件覆盖某些部分。

为了说明可以通过该库简化的一些常见任务,假设有一个我们正在尝试的模型的基本体系结构,以及它的多种变体。使用Hydra,可以定义基本配置,然后运行多个作业,并进行以下更改:


  
  
  1. python train_model.py variation=option_a,option_b

  
  
  1. ├── variation
  2. │   ├── option_a.yaml
  3. │   └── option_b.yaml
  4. ├── base.yaml
  5. └── train_model.py

Hydra 的表亲 OmegaConf 为分层配置系统的基础提供了一致的API,并支持YAML,配置文件,对象和CLI参数等不同来源。

这是21世纪进行配置管理的必备条件!

7. PyTorch Lightning

每一种提高数据科学团队生产力的工具都值得鼓励。没有理由让从事数据科学项目的人每次都重新发明轮子,反复思考如何更好地组织其项目中的代码,使用维护得不好的“ PyTorch 样板”,或者使用更高级别的抽象功能。

PyTorch Lightning 通过将科学与工程分离而有助于提高生产率。从某种意义上说,它使您的代码更简洁,有点像 TensorFlow 的 Keras。但是它仍然是PyTorch,您可以访问所有常用的API。

该库可帮助团队利用围绕组织的软件工程的良好实践和明确的组件职责来构建可轻松扩展,以在多个GPU,TPU和CPU上进行训练高质量代码。

一个可以帮助数据科学团队的初级成员产生更好结果的库,但是,由于整体生产力的提高,而且没有放弃控制权,更有经验的成员会喜欢它。

8. Hummingbird

并非所有的机器学习都是深度学习。通常,您的模型由scikit-learn中实现的更传统的算法(例如,Random Forest)组成,或者您使用诸如流行的LightGBM和XGBoost之类的梯度增强方法。

但是,深度学习领域正在发生许多进步。像PyTorch这样的框架正在以惊人的速度发展,并且硬件设备已经过优化,可以更快地运行张量计算并降低功耗。如果我们可以利用所有这些工作来更快、更高效地运行传统方法,那岂不是很好吗?

这是Hummingbird的用武之地。微软提供的这个新库可以将训练有素的传统ML模型编译为张量计算。这很棒,因为它使您无需重新设计模型。

到目前为止,Hummingbird支持转换为PyTorch,TorchScript,ONNX和TVM,以及各种ML模型和矢量化器。推理API也与Sklearn范例非常相似,可让您重用现有代码,但将实现更改为Hummingbird生成的代码。这是一个值得关注的工具,因为它获得了对模式模型和格式的支持!

9. HiPlot

几乎每个数据科学家在职业生涯中的某个时候都曾处理过高维数据。不幸的是,人脑没有足够的连线直观地处理这种数据,因此我们必须诉诸其他技术。

今年初,Facebook发布了HiPlot,这是一个库,可使用并行绘图和其他图形方式来表示信息,从而帮助发现高维数据中的相关性和模式。该概念已在其发布博客文章中进行了解释,但基本上,它是一种可视化和过滤高维数据的好方法。

HiPlot具有交互性,可扩展性,您可以从标准Jupyter笔记本电脑或通过其自己的服务器使用它。

10. Scalene

随着Python库生态系统变得越来越复杂,我们发现自己正在编写越来越多的依赖C扩展和多线程的代码。在衡量性能时,这成为一个问题,因为CPython内置的探查器无法正确处理多线程和本机代码。

那就是Scalene进行救援的时候。Scalene是用于Python脚本的CPU和内存探查器,能够正确处理多线程代码并区分运行Python和本机代码所花费的时间。无需修改代码,只需要在命令行中使用scalene运行脚本,脚本就会为您生成文本或HTML报告,显示代码每一行的CPU和内存使用情况。

w3cschool小编告诉你什么是前端SEO

thbcm阅读(253)

SEO简介

全称:Search English Optimization,搜索引擎优化。自从有了搜索引擎,SEO便诞生了。

推荐好课:SEO基础知识教程SEO初学者必备知识SEO 教程常用SEO引擎优化工具

存在的意义:为了提升网页在搜索引擎自然搜索结果中的收录数量以及排序位置而做的优化行为。简言之,就是希望百度等搜索引擎能多多我们收录精心制作后的网站,并且在别人访问时网站能排在前面。

分类:白帽SEO和黑帽SEO。白帽SEO,起到了改良和规范网站设计的作用,使网站对搜索引擎和用户更加友好,并且网站也能从搜索引擎中获取合理的流量,这是搜索引擎鼓励和支持的。黑帽SEO,利用和放大搜索引擎政策缺陷来获取更多用户的访问量,这类行为大多是欺骗搜索引擎,一般搜索引擎公司是不支持与鼓励的。本文针对白帽SEO,那么白帽SEO能做什么呢?

1. 对网站的标题、关键字、描述精心设置,反映网站的定位,让搜索引擎明白网站是做什么的;

2. 网站内容优化:内容与关键字的对应,增加关键字的密度;

3. 在网站上合理设置Robot.txt文件;

4. 生成针对搜索引擎友好的网站地图;

5. 增加外部链接,到各个网站上宣传;

前端SEO

通过网站的结构布局设计和网页代码优化,使前端页面既能让浏览器用户能够看懂,也能让“蜘蛛”看懂。

(1)网站结构布局优化:尽量简单、开门见山,提倡扁平化结构。

一般而言,建立的网站结构层次越少,越容易被“蜘蛛”抓取,也就容易被收录。一般中小型网站目录结构超过三级,“蜘蛛”便不愿意往下爬,“万一天黑迷路了怎么办”。并且根据相关调查:访客如果经过跳转3次还没找到需要的信息,很可能离开。因此,三层目录结构也是体验的需要。为此我们需要做到:

1. 控制首页链接数量

网站首页是权重最高的地方,如果首页链接太少,没有“桥”,“蜘蛛”不能继续往下爬到内页,直接影响网站收录数量。但是首页链接也不能太多,一旦太多,没有实质性的链接,很容易影响用户体验,也会降低网站首页的权重,收录效果也不好。

因此对于中小型企业网站,建议首页链接在100个以内,链接的性质可以包含页面导航、底部导航、锚文字链接等等,注意链接要建立在用户的良好体验和引导用户获取信息的基础之上。

2.扁平化的目录层次,尽量让“蜘蛛”只要跳转3次,就能到达网站内的任何一个内页。扁平化的目录结构,比如:“植物”–> “水果” –> “苹果”、“桔子”、“香蕉”,通过3级就能找到香蕉了。

3.导航优化

导航应该尽量采用文字方式,也可以搭配图片导航,但是图片代码一定要进行优化,<img>标签必须添加“alt”和“title”属性,告诉搜索引擎导航的定位,做到即使图片未能正常显示时,用户也能看到提示文字。

其次,在每一个网页上应该加上面包屑导航,好处:从用户体验方面来说,可以让用户了解当前所处的位置以及当前页面在整个网站中的位置,帮助用户很快了解网站组织形式,从而形成更好的位置感,同时提供了返回各个页面的接口,方便用户操作;对“蜘蛛”而言,能够清楚的了解网站结构,同时还增加了大量的内部链接,方便抓取,降低跳出率。

4. 网站的结构布局–不可忽略的细节

页面头部:logo及主导航,以及用户的信息。

页面主体:左边正文,包括面包屑导航及正文;右边放热门文章及相关文章,好处:留住访客,让访客多停留,对“蜘蛛”而言,这些文章属于相关链接,增强了页面相关性,也能增强页面的权重。

页面底部:版权信息和友情链接。

特别注意:分页导航写法,推荐写法:“首页 1 2 3 4 5 6 7 8 9 下拉框”,这样“蜘蛛”能够根据相应页码直接跳转,下拉框直接选择页面跳转。而下面的写法是不推荐的,“首页 下一页 尾页”,特别是当分页数量特别多时,“蜘蛛”需要经过很多次往下爬,才能抓取,会很累、会容易放弃。

5.控制页面的大小,减少http请求,提高网站的加载速度。

一个页面最好不要超过100k,太大,页面加载速度慢。当速度很慢时,用户体验不好,留不住访客,并且一旦超时,“蜘蛛”也会离开。

(2)网页代码优化

1.<title>标题:只强调重点即可,尽量把重要的关键词放在前面,关键词不要重复出现,尽量做到每个页面的<title>标题中不要设置相同的内容。

2.<meta keywords>标签:关键词,列举出几个页面的重要关键字即可,切记过分堆砌。

3.<meta description>标签:网页描述,需要高度概括网页内容,切记不能太长,过分堆砌关键词,每个页面也要有所不同。

4.<body>中的标签:尽量让代码语义化,在适当的位置使用适当的标签,用正确的标签做正确的事。让阅读源码者和“蜘蛛”都一目了然。比如:h1-h6 是用于标题类的,<nav>标签是用来设置页面主导航的等。

5.<a>标签:页内链接,要加 “title” 属性加以说明,让访客和 “蜘蛛” 知道。而外部链接,链接到其他网站的,则需要加上 el=”nofollow” 属性, 告诉 “蜘蛛” 不要爬,因为一旦“蜘蛛”爬了外部链接之后,就不会再回来了。

6.正文标题要用<h1>标签:“蜘蛛” 认为它最重要,若不喜欢<h1>的默认样式可以通过CSS设置。尽量做到正文标题用<h1>标签,副标题用<h2>标签, 而其它地方不应该随便乱用 h 标题标签。

7.<br>标签:只用于文本内容的换行,比如:


  
  
  1. <p>
  2.    第一行文字内容<br/>
  3. 第二行文字内容<br/>
  4. 第三行文字内容
  5. </p>

8.表格应该使用<caption>表格标题标签

9.<img>应使用 “alt” 属性加以说明

10.<strong>、<em>标签 : 需要强调时使用。<strong>标签在搜索引擎中能够得到高度的重视,它能突出关键词,表现重要的内容,<em>标签强调效果仅次于<strong>标签。

<b>、<i>标签: 只是用于显示效果时使用,在SEO中不会起任何效果。

10、文本缩进不要使用特殊符号 &nbsp; 应当使用CSS进行设置。版权符号不要使用特殊符号 &copy; 可以直接使用输入法,拼“banquan”,选择序号5就能打出版权符号©。

12、巧妙利用CSS布局,将重要内容的HTML代码放在最前面,最前面的内容被认为是最重要的,优先让“蜘蛛”读取,进行内容关键词抓取。

13.重要内容不要用JS输出,因为“蜘蛛”不认识

14.尽量少使用iframe框架,因为“蜘蛛”一般不会读取其中的内容

15.谨慎使用 display:none :对于不想显示的文字内容,应当设置z-index或设置到浏览器显示器之外。因为搜索引擎会过滤掉display:none其中的内容。

16. 不断精简代码

17.js代码如果是操作DOM操作,应尽量放在body结束标签之前,html代码之后。

注意点:

HTML:

1.标签的有开有合。

2.避免冗余代码,例如去除空格字符。

3.合理利用标签语义化。

4.合理的嵌套规则,避免行元素内嵌套块元素。

5.img标签内需要添加title属性和alt属性。

6.a标签内需要添加title属性。

7.Meta标签的优化(过去搜索引擎优化的重要手法,现在已经不是关键因素,但仍不可忽略)主要包括: Meta description、Meta keywords的设置  关键字密度要适度,通常为2%-8%,也就是说你的关键字必须 在 页面中出现若干次,或者在搜索引擎允许的范围内,要避免堆砌关键字。

8.<title>页面标题,必须列出信息的标题、网站的名称以及相关关键字,避免堆关键字。

9.合理使用注释。

CSS:

1.避免将css代码写在标签内。

2.如果css代码量少,可直接写在头部。否则请使用外部引入的方式。

3.请不要使用通配符选择器 *{margin:0;padding:0;} 这不仅仅因为它是缓慢和低效率的方法,而且还会导致一 些不必要的元素也重置了外边距和内边距。请引用reset文件,引用reset文件在自己定义的css文件之前。

4.css代码缩写可以提高你写代码的速度,精简你的代码量,包括margin,padding,border ,font, background和颜色值等。

5.利用css继承,如果一个父元素内有多个子元素拥有相同的样式,可将相同的样式定义在元素上。

6.如果多个元素拥有相同的样式,可定义一个通用的class或使用群组选择器。

7.使用背景图合并技术。

8.适当的代码注释。

JS:

1.采用外部引入的方法。

2.合理合并JS代码,可减少服务器的压力。

3.良好的JS代码习惯。例如:减少页面重绘,减少作用域链上的查找次数。

位运算符在 JS 中的妙用

thbcm阅读(190)

按位与(AND)&

将数字转换成二进制,然后进行与操作,再转换回十进制


  
  
  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  3. // --------------------------------------------------
  4. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  5. console.log(1 & 3) // 1

按位或(OR)|

将数字转换为二进制,然后进行或操作,再转换回十进制


  
  
  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  3. // --------------------------------------------------
  4. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  5. console.log(1 | 3) // 3

按位异或(XOR)^

将数字转换为二进制,然后进行异或操作,再转换回十进制


  
  
  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 3 的二进制表示为 00000000 00000000 00000000 00000011
  3. // --------------------------------------------------
  4. // 2 的二进制表示为 00000000 00000000 00000000 00000010
  5. console.log(1 ^ 3) // 2

按位非(NOT)~

将数字转换为二进制,然后进行非操作,再转换回十进制,也就求二进制的反码


  
  
  1. // 1 反码二进制表示为 11111111 11111111 11111111 11111110
  2. // 由于第一位(符号位)是1,所以这个数是负数。JavaScript 内部采用补码形式表示负数,即需要将这个数减去 1,再去一次反,然后加上负号才能得到这个负数对应的十进制数值
  3. // 1 的反码减一表示为 11111111 11111111 11111111 11111101
  4. // 取反             00000000 00000000 00000000 00000010
  5. // 表示为 -2
  6. console.log(~1) // -2

左移(Left shift)<<

将数字转换成二进制,然后丢弃高位,低位补0


  
  
  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 2 的二进制表示为 00000000 00000000 00000000 00000010
  3. console.log(1 << 1) // 2

有符号右移 >>

将数字转成二进制,然后丢弃低位,拷贝最左侧的位以填充左侧


  
  
  1. // 1 的二进制表示为 00000000 00000000 00000000 00000001
  2. // 0 的二进制表示为 00000000 00000000 00000000 00000000
  3. console.log(1 >> 1) // 0

无符号右移 >>>

将数字转成二进制,然后丢弃低位,左侧补0,因此总是非负数。

对于非负数,有符号右移和无符号右移结果总是相等。

位运算符在 JS 中的妙用

判断奇偶


  
  
  1. // 偶数 & 1 = 0
  2. // 奇数 & 1 = 1
  3. console.log(2 & 1) // 0
  4. console.log(3 & 1) // 1

取整


  
  
  1. console.log(~~6.83) // 6
  2. console.log(6.83 >> 0) // 6
  3. console.log(6.83 << 0) // 6
  4. console.log(6.83 | 0) // 6
  5. // 不可对负数取整
  6. console.log(6.83 >>> 0) // 6

交换值


  
  
  1. var a = 6
  2. var b = 8
  3. a ^= b
  4. b ^= a
  5. a ^= b
  6. console.log(a) // 8
  7. console.log(b) // 6

RGB 值和16 进制颜色值转换


  
  
  1. function hexToRGB(hex: string): string{
  2.   const hexx = hex.replace('#', '0x')
  3.   const r = hexx >> 16
  4.   const g = hexx >> 8 & 0xff
  5.   const b = hexx & 0xff
  6.   return `rgb(${r}, ${g}, ${b})`
  7. }
  8. function RGBToHex(rgb: string): string{
  9.   const rgbArr = rgb.split(/[^\d]+/)
  10.   const color = rgbArr[1] | rgbArr[2] << 8 | rgbArr[3]
  11.   return `#${color.toString(16)}`
  12. }

推荐好课:

小白学前端:JavaScript零基础入门到进阶(2020版)

JavaScript实战:动态网站开发

Javascript移动端App实战开发

leetcode旋转数组(小白解题)

thbcm阅读(184)

解题思路

暴力法每次旋转1个位置, 旋转k次即为正确答案。

旋转的时候也是利用前驱结点来实现的, 前驱结点的更新也借助temp变量。

这里重点体会如何完成向后移动一次目前阶段遇到题目不要钻牛角尖, 暴力法能解就暴力法。

代码

class Solution {
    public void rotate(int[] nums, int k) {
        int previous;
		int temp;
		for (int i = 0; i < k; i++) {
			previous = nums[nums.length-1];  //前驱结点初始为最后一个结点
			for (int j = 0; j < nums.length; j++) {
				temp = nums[j]; //先保存当前结点
				nums[j]=previous;
				previous=temp; //更新前驱结点
			}
		}
    }
}

反转法 很实用

这个方法基于这个事实:当我们旋转数组 k 次,k%n 个尾部元素会被移动到头部, 剩下的元素依次向后移动。

1、反转可以把k%n个元素先放到前面,只需要对数组进行 0到k-1范围内的反转就可以得到想要的顺序;

2、反转剩下的k-1到n-1个元素即实现了元素依次后移;

3、前往要主义此处的k有可能超出数组长度,而如果恰等于数组长度就等于没变所以k=k%n。

class Solution {
    public void rotate(int[] nums, int k) {
		int n = nums.length;  
        k %= n; //k可能会查过数组长度造成错误
		//1、反转数组
		reverse(nums,0,n-1);
        //2、前k个反转,后n-k个反转
		reverse(nums,0,k-1);
		reverse(nums,k,n-1);
    }
    //反转数组 用这种写法可以方便的反转任意区间的数组 也很使用
	public void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }
}

环状替换

想到了但是代码实现的时候遇到了当 n%k==0的时候死循环而想不到解决的办法。

以下是leetcode提供的代码,巧妙的用了双循环循环解决了我不能解决的尴尬,核心代码都是一样的,外循环的此时必定是数组长度。

用count来控制外循环次数,内循环一镜到底都是我没有想到的。在编码方面还有很大提高。

public class Solution {
    public void rotate(int[] nums, int k) {
        k = k % nums.length;
        int count = 0;
        for (int start = 0; count < nums.length; start++) {
            int current = start;
            int prev = nums[start];
            do {
                int next = (current + k) % nums.length;
                int temp = nums[next];
                nums[next] = prev;
                prev = temp;
                current = next;
                count++;
            } while (start != current);
        }
    }
}

推荐好课:

Java:23天零基础完全入门

Java工程师基础教程

MySQL零基础入门

DIV+CSS建立符合WEB标准网页的好处

thbcm阅读(200)

使用 DIV+CSS 建立符合 W3C 标准网站对程序员是有非常多的益处的,我们看如下的八条优势。

一、使用 div 的方式进行程序的嵌套,特别是使用 php 这样的代码嵌套,可以减少出现像 table 中那样繁重的代码,对于页面嵌套可以减少因 table 代码而带来的问题。

二、使用 div 对于设计使用AJAX等的时候,可以减少 Javascript 代码对于页面控制时候的复杂度,因为使用 table 的时候,层次关系最起码有三层,table-tr-td 以上,而使用div则基本上只有两层(div-div)的概念。

三、用 div 对于页面的定位更准确,因为使用 div 的代码的宽度高度等都使用 css 或者页面的 style 方式控制,即在需要修改一个框(box)的大小、位置时候,可以直接修改 css 的代码或者该标签的 style 代码即可实现。而几乎不用修改其他代码,但是使用table的情况下,则可能会因为table的位置出现变动,而影响到对整片代码的修改。

四、在页面效果来说,由于 Firefox等浏览器再对 table 方面进行了很多的优化,才使得目前 firefox 在处理页面的输出时候可以这么接近 IE 的效果,但是在对于一些 table 的排版,用 firefox 会存在一下莫名起码的以为等问题。这些问题在 IE 中可能不存在,但是在使用Firefox 等其他引擎的浏览器就可能会出现了。

五、就是输出的代码将更小。由于使用 div 进行页面代码的组织,而布局由 CSS 等文件进行控制,因此从输出的 html 中产生输出的代码要一般比使用 table 的页面少70%。从系统的负载上考虑,将会更好解决因为代码上面的损耗,对维护系统的稳定起到一定的帮助。

六、更方便搜索引擎的搜索,目前的搜索引擎只是对页面的代码进行分析,因此页面代码更小而且有语意页面,搜索引擎的效能会更高,用户的文字信息会更容易被搜索引擎进行收集,对于 web 网站来说被将会更容易被搜索引擎所引用。

七、无可避免,在页面的一些位置,我们还是依旧使用 table 方式表现,比如说一些商品列表,订单列表,提交表单等,我们依旧使用 table 的方式来实现,因为对于这样的表格表现形式,使用 div 实现时候还不太成熟。

八、最后 W3C 标准是目前网站开发的主流,作为专业的 web开发团队,哪有理由不使用这种技术呢!

联系我们