整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

ASP.NET资源大全

PI

来源:快舔包我很肥

框架

  • NancyFx:轻量、用于构建 HTTP 基础服务的非正式(low-ceremony)框架,基于.Net 及 Mono 平台。
  • ASP.NET WebAPI:快捷创建 HTTP 服务的框架,可以广泛用于多种不同的客户端,包括浏览器和移动设备。
  • ServiceStack:架构缜密、速度飞快、令人愉悦的 web 服务。
  • Nelibur:Nelibur 是一个使用纯 WCF 构建的基于消息的 web 服务框架。Nelibur 可以便捷地创建高性能、基于消息的 web 服务,使得你全面拥有 WCF 的强大能力。


WebAPI Contrib:帮助你提高 ASP.NET Web API 能力的开源项目集合。

应用框架(Application Frameworks)

  • ASP.NET Boilerplate:现代 ASP.NET MVC web 应用程序的入门,包含最佳实践和最流行的工具。
  • Orleans:Orleans 框架提供了直接构建分布式、大规模计算应用的方法,无需学习和使用复杂的并行或扩展模型。
  • CoreFX:corefx 仓库包含了 .NET 核心功能库的实现(被称为“CoreFX”)。包含了 System.Collections、System.IO、System.Xml 以及诸多其它组件。目前构建并运行于 Windows 平台。你可以关注这个仓库,了解在未来的几个月内即将增加的对 Linux 和 Mac 的支持。
  • CSLA .NET:业务层开发框架 http://www.cslanet.com。
  • Mono:Mono 是 ECMA CLI、C# 以及 .NET 的开源实现。
  • Mono-Addins:Mono.Addins 是一个通用框架,用于创建可扩展的应用程序,以及这些应用程序的扩展插件。
  • Spring.Net:Spring.NET 是一个开源的应用程序框架,可以便捷地创建企业级 .NET 项目。


应用模板(Application Templates)

  • MVC.Template:ASP.NET MVC 5 入门项目模板。
  • ProjectScaffold:F# 基金会推荐的 .NET 解决方案的原型——包括文件系统的搭建、用于管理依赖的 Paket 以及用于自动化构建、测试的 FAKE。默认情况下,构建流程也会对文档进行编译,并生成 NuGet 程序包。
  • Side-Waffle :包含大量有用的 Web 和桌面开发模板。Side-Waffle
  • Template10 :带有设计模式的 Windows 10 模板。Template10


人工智能(Artificial Intelligence)

  • AIMLBot(Program#):使用 C# 编写的一个小型、快速、兼容标准、易于定制的聊天机器人,基于 AIML (人工智能标记语言 Artificial Intelligence Markup Language)。
  • SIML:智能综合智能标记语言(Synthetic Intelligence Markup Language),下一代聊天机器人及数字助手语言。


程序集处理(Assembly Manipulation)

  • dnSpy:dnSpy 是一个 .NET 程序集编辑器、反编译器和调试器,来自 ILSpy 分支。
  • Fody:织入(weaving).net 程序集的可扩展工具。
  • Mono.Cecil:Cecil 类库用于生成和检查 ECMA CIL 程序和库。


资源(Assets)

  • Cassette:管理 .NET web 应用程序资源(脚本、css 和 模板)Cassette
  • NodeAssets:.net 资源管理器,通过 SignalR 实时更新 css,也可以使用 NodeJS 编译器。
  • Bundler:编译和最小化 Less、Sass、Stylus、Css、JS、CoffeeScript、LiveScript 文件。MVC集成了 MVC 和 ServiceStack。
  • ClientDependency:压缩CSS与JS,提供WebForm与MVC版本。
  • SquishIt:让你轻松合并一些 css 和 javascript。


认证和授权(Authentication and Authorization)

  • ASP.NET Identity:用于 ASP.NET 应用程序的新身份系统。
  • DotNetOpenAuth:OpenID、OAuth 和 InfoCard 协议的一个 C# 实现。


  • Logibit Hawk:一个 F# Hawk 认证库。


  • IdentityModel:.NET 4.5 和 MVC4、Web API 身份和访问控制的辅助库。
  • IdentityServer:可扩展的 OAuth2 和 OpenID 连接提供程序框架。
  • OAuth:超轻量级 OAuth 1.0a 签名生成库,C# 编写。


自动构建(Build Automation)

  • Psake:基于 .NET 的自动化构建工具,使用 PowerShell 编写。
  • FAKE:F# Make,一个跨平台自动构建系统。
  • Invoke-Build:PowerShell 自动构建和测试工具,灵感来自 Psake。
  • MSBuild:微软构建引擎(MSBuild)是 .NET 和 Visual Studio 的构建平台。
  • Cake:Cake(C# Make)使用 C# DSL 的跨平台自动构建系统。


缓存(Caching)

  • CacheCow:ASP.NET Web API HTTP 客户端和服务器端缓存实现。
  • Akavache:一个异步、持久化的键值存储。
  • CacheManager:是用C#为.NET写的缓存管理抽象层,支持多种缓存工具,可以实现层次化的缓存。


CLI

  • Command Line Parser:Command Line Parser 类库为 CLR 应用程序提供了一套简洁的 API,用于处理命令行参数及相关任务。
  • Fluent Command Line Parser:一个简单、强类型的 .NET C# 命令行解析库,交互方式流畅易用。
  • Power Args:PowerArgs 将命令行参数转换为 .NET 对象,便于程序使用。它还提供了大量可选的扩展,例如参数校验、自动生成使用帮助、tab 补全等等。
  • UnionArgParser:针对 F# 应用程序的声明式 CLI 参数和 XML 配置解析器。


CLR

  • CoreCLR:coreclr repo 包含了完整的 .NET 核心运行时实现(称为“CoreCLR”)。它包括 RyuJIT、.NET GC、非托管代码交互(native interop)等诸多组件。它目前构建和运行于 Windows 平台。你可以关注这个仓库,了解未来的几个月内即将增加的对 Linux 和 Mac 的支持。


CMS

  • Composite C1:一个 web 内容管理系统,着重在用户体验及适应性。
  • mojoPortal:MojoPortal 是一个可扩展、跨数据库、移动友好的 web 内容管理系统(CMS)和 web 应用程序框架,使用 C# ASP.NET 编写。
  • N2CMS:开源、轻量、代码优先的 CMS,可以无缝地集成到任何 MVC 项目中。
  • Orchard:免费、开源、专注社区的项目,目标是在 ASP.NET 平台上提供应用程序和可重用组件。
  • Piranha CMS:Piranha 是一个有趣、快速、轻量级的 .NET 框架,用于开发基于 cms 附带其它功能的 web 应用程序。它基于 ASP.NET MVC 和 Web 页面创建,完全兼容 Visual Studio 和 WebMatrix。
  • Umbraco:Umbraco 是一个免费开源的内容管理系统,基于 ASP.NET 平台构建。


代码分析和度量(Code Analysis and Metrics)

  • CodeMaid:Visual studio 扩展,用于清理、挖掘和简化 C#、C++、F#、VB、PHP、JSON、XAML、XML、ASP、HTML、CSS、LESS、SCSS、JavaScript 和 TypeScript 代码。
  • StyleCop:StyleCop 使用一组风格和一致性规则,对 C# 源代码进行分析和强制性检查。
  • Gendarme:可扩展的、基于规则的工具,用于在 .NET 应用程序和类库中查找问题。
  • Metrics-Net:捕获 CLR 和应用程序级别的度量值。所以你知道它的功能。


编译器(Compiler)

  • Bridge.NET:将 C# 编译成 JavaScript 的开源编译器 http://bridge.net/。
  • ClojureCLR:从 Clojure 到 CLR 的转换,是 Clojure 项目的一部分。
  • F#:F# 编译器、核心库和工具——更安全、更快、代码更好的函数式编程语言。
  • FunScript:F# 到 JavaScript 的编译器,可以通过 TypeScript 类型提供程序使用 JQuery 等 JavaScript 库。
  • JSIL:CIL 到 Javascript 的编译器 http://jsil.org/。
  • Mono-basic:Visual Basic 编译器和运行时。
  • Nemerle:Nemerle 是一个 .NET 平台高级静态类型编程语言。它提供函数式、面向对象式和命令式编程语言的特性。它拥有一个简单的类似 C# 的语法和强大的元编程(meta-programming)系统。
  • Netjs:.NET 到 TypeScript 和 JavaScript 编译器。兼容可移植类库。你甚至可以使用 EXE 文件。
  • Roslyn:.NET 编译平台(“Roslyn”)提供开源的 C# 和 Visual Basic 编译器,包含丰富的代码分析 API。它可以使用和 Visual Studio 一样的 API 来构建代码分析工具。
  • VisualFSharp:Visual F# 编译器和工具。


压缩(Compression)

  • SharpCompress:SharpCompress 是一个用于 .NET、Mono、Silverlight、WP7 的压缩类库,可以解压rar、7zip、zip、tar、bzip2 和 gzip,提供单向读取和随机文件访问 API。支持对 zip/tar/bzip2/gzip 进行写入的实现。
  • DotNetZip.Semverd:一个开源项目,提供对 ZIP 文件处理的 .NET 类库和相关工具。 (分支自 已经不再维护的DotNetZip)DotNetZip.Semverd
  • SharpZipLib:一个 Zip、GZip、Tar 和 BZip2 的类库,完全由 C# 编写,面向 .NET 平台。


持续集成(Continuous Integration)

  • TeamCity:可以直接使用的,可扩展、面向开发人员友好的构建服务器——开箱即用。
  • CruiseControl.NET:一个自动化持续集成服务器,使用 .NET Framework 实现。
  • MyGet:为NuGet、NPM、Bower 和 VSIX 提供持续集成、部署、宿主程序包仓库的服务。
  • AppVeyor:.NET 持续构建和部署服务。


加密(Cryptography)

  • BouncyCastle:和 .Net 的 System.Security.Cryptography 一起,在 CLR 上提供加密算法的实现。
  • HashLib:HashLib 包含了几乎所有你见过的哈希算法,它几乎支持所有东西并且非常容易使用。
  • libsodium-net:libsodium for .NET——一个安全加密库。
  • StreamCryptor:使用 libsodium 和 protobuf 对流进行加密和解密。


数据库(Database)

  • BrightstarDb:BrightstarDB 是一个原生的 .NET RDF 三元组数据库(triple store)。
  • Event Store:开源的功能性数据库,支持使用 JavaScript 进行复杂事件处理。 https://geteventstore.com
  • LiteDB:一个 .NET 的 NoSQL 单文件文档数据库。
  • RavenDB:支持 linq 的 .NET 文档数据库。


数据库驱动(Database Drivers)

  • MySQL Connector:完全托管的 MySQL ADO.NET 数据库提供程序、连接器。
  • Npgsql:Postgresql 的 .Net 数据提供程序。
  • MongoDB:MongoDB 官方 C# 驱动。
  • ServiceStack Redis:.NET 领先的 C# Redis 客户端。
  • StackExchange Redis:来自 StackExchange 的通用 redis 客户端。
  • Cassandra:DataStax 开发的 Apache Cassandra .NET 驱动程序。
  • Couchbase:couchbase 官方 .NET 客户端库,基于 Enyim memcached 客户端。
  • Firebird.NET:由C# 编写的 .NET 数据提供程序,提供对 Firebird API 的高性能原生实现。


反编译(Decompilation)

  • ILSpy:ILSpy 是一个开源的 .NET 程序集查看器和反编译器。
  • JustDecompile Engine:JustDecompile 反编译引擎。
  • de4dot:是一款强大的.NET程序集反混淆和脱壳工具(开源GPLv3)。


部署(Deployment)

  • Unfold:基于 Powershell 的 .net web 应用程序部署解决方案。


DirectX

  • SlimDX:为 .NET 应用程序提供的 DirectX 封装。
  • SharpDX:SharpDX 是一个开源项目,为 .Net 及所有 Windows 平台提供完整的 DirectX API,可以开发高性能的游戏、2D/3D图形渲染以及实时音频应用程序。


分布式计算(Distributed Computing)

  • Project Orleans:Orleans 框架提供了直接构建分布式、大规模计算应用的方法,无需学习和使用复杂的并行或扩展模型。由微软研究院开发。
  • Akka.net:Akka.NET 是流行的 Java/Scala 框架 Akka 的 .NET 版本。它由社区提供,与 Typesafe(原始的 Java、Scala 版本的开发商)无关。


文档(Documentation)

  • Sandcastle:Sandcastle 帮助文件生成器和 NDoc 类似。
  • SharpDox:一个 c# 文档工具。
  • Swashbuckle:向 WebApi 项目无缝地添加 swagger 文档(译者注:swagger 是一套用于生成、描述、展现 RESTful 风格 web 服务文档的框架和规范)。
  • NSwag:通过Swagger规范生成.NET、TypeScript的Web API客户端。
  • F# Formatting:F# 和 C# 项目的文档工具,文档生成自 F# 脚本文件、Markdown 文档、内嵌 XML 或 Markdown评论。


电子商务和支付(E-Commerce and Payments)

  • Paypal Merchant SDK:Paypal Merchant官方.NET SDK。
  • NopCommerce:nopCommerce。开源的电子商务购物车(ASP.NET MVC)。


  • ServiceStack.Stripe:针对 stripe.com REST API 的强类型 .NET 客户端。


  • SmartStoreNET:免费 ASP.NET MVC 电子商务购物车解决方案。


  • Stripe.Net:Stripe.net 是针对 http://stripe.com 完整服务的 .net api。


  • BeYourMarket:BeYourMarket 是一个点对点的市场框架。


  • Virto Commerce:Virto Commerce 是第二个版本,也是唯一的开源许可下的企业级别电子商务产品。Virto Commerce 基于 .NET 4.5,使用了 MVC、IoC、EF、Azure、Angular JS 等其他先进技术。它可以在微软的云平台(Azure)、亚马逊云服务(AWS)和企业内部部署。


环境管理(Environment Management)

  • DNVM:.NET SDK 管理器,一组命令行工具,用于更新和配置需要使用的运行时环境(DNX)。


ETL

  • Reactive ETL:Reactive ETL 使用 .NET 反应性扩展框架(reactive extensions) 重写了 Rhino ETL。


游戏(Game)

  • MonoGame:一个用来创建跨平台游戏的强大框架。
  • CocosSharp:CocosSharp 是 Cocos2D 和 Cocos3D API 的 C# 实现版本,可以在所有支持 MonoGame 的平台上运行。
  • Duality:Duality 是一个 2D 游戏开发框架。专注于功能的模块化,自带一个可视化编辑器。
  • Paradox:Paradox 游戏引擎。


地理信息系统(Gis)

  • NetTopologySuite:一个 在 .NET 平台上实现快速、可靠的 GIS 系统解决方案。
  • SharpMap:一个易于使用的地图库,可以用于 web 和桌面应用程序。


Git工具(Git Tools)

  • Bonobo Git Server:Bonobo Git Server for Windows 是一个 web 应用程序,可以安装在你自己的 IIS 上,用于管理和连接你的 git 仓库。
  • GitExtensions:GitExtensions 包含资源管理器扩展、Visual Studio 2008/2010/2012/2013 插件和一个独立的 Git 仓库工具。
  • GitLink:让用户可以单步调试托管在 GitHub 或 BitBucket 上的代码。
  • GitVersion:根据你的 Git 仓库的状态生成一个语义化版本号(Semantic Version Number)。
  • LibGit2Sharp:LibGit2Sharp 带来了 libgit2 所有的功能和速度,是一个本地 Git 实现,可以运行在 .Net 和 Mono 平台。
  • NGit:NGit 是 JGit 移植到 C# 的版本。
  • posh-git:Git 的 PowerShell 环境。


图形(Graphics)

  • Oxyplot:OxyPlot 是一个 .NET 跨平台绘图库。
  • OpenTK:Open Toolkit 是一个封装了 OpenGL、OpenCL 和 OpenAL 的 高级底层 C# 开发库。
  • NGraphics:NGraphics 是一个 .NET 跨平台矢量图形渲染库。


GUI

  • MahApps.Metro:用于创建 Metro 风格 WPF 应用的工具箱。
  • Callisto:用于 Windows 8 XAML 应用的控件工具箱。包含若干 UI 控件,让你更容易地创建符合 Windows UI 风格规范的Windows 商店应用。
  • ObjectListView:ObjectListView 使用 C# 封装了 .NET 的 ListView 控件。它使得 ListView 更加易用,并且加入了一些新特性。
  • DockPanelSuite:灵感来自 Visual Studio 的停靠窗口(docking)类库,用于 .NET WinForm 应用。
  • AvalonEdit:在 SharpDevelop 中使用,基于 WPF 的文本编辑器组件。
  • XWT:跨平台 UI 工具箱,用于创建 .NET 和 Mono 桌面应用程序。
  • Gtk#:Gtk# 是 Gtk+ GUI 工具箱的 Mono/.NET 版本,绝大多数 Mono 中的 GUI 应用都基于它构建。
  • MaterialDesignInXamlToolkit:用于创建 Material Design 风格 WPF 应用的工具箱。
  • Eto.Forms:跨平台的 GUI 框架,用于 .NET 和 Mono 下的桌面和移动应用程序。
  • Dragablz:可拖拽、可分离(tearable,译者注:即拖拽标签页成为独立窗口)的 WPF 标签页控件(类似 Chrome)。支持布局和主题,包含兼容 MahApps 和 Material Design 的主题。
  • Fluent.Ribbon:Fluent Ribbon Control Suite 是一个在 WPF 中实现 Office 和 Windows 8 风格的 Ribbon 库。


HTML 和 CSS(HTML and CSS)

  • AngleSharp:支持构建完整的 HTML5 DOM 和 CSS3 模型。
  • CsQuery:jQuery 风格的HTML5 解析器,可与 DOM 交互。
  • dotless:ruby Less CSS 库的 .NET 移植版本。
  • ExCSS:C# 的 CSS3 解析器开发库。
  • FluentBootstrap:让ASP.NET MVC 和 WebPages 更容易使用 Boostrap CSS 框架。
  • HtmlAgilityPack:一个灵活的 HTML 解析器,可以对 DOM 进行读写,支持 XPATH 和 XSLT。
  • Jumony:类似HtmlAgilityPack框架,性能有改善。


HTTP

  • Http.fs:[F#] 中的一个函数式 HTTP 客户端。
  • RestSharp:.NET 下简单的 REST 和 HTTP API 协议客户端。
  • EasyHttp:C# Http开发库。
  • Refit:Xamarin 和 .NET 下自动生成强类型的 REST 库。
  • RestEase:类型安全且易于使用的 REST API 客户端库,简单可定制。大部分灵感来自 Refit。


IDE

  • SharpDevelop:用于 .NET 编程语言的免费 IDE。
  • MonoDevelop:MonoDevelop 是一个跨平台的 IDE,主要面向 Mono/.NET 开发者。
  • Visual Studio Express:用于 .NET 开发的免费、轻量版本的 Visual Studio。
  • Visual Studio Community:功能完整的免费 IDE。
  • Waf DotNetPad:简单快速的代码编辑器,让开发 C# 或 Visual Basic 充满乐趣。
  • Visual Studio Code:非常棒的编辑器,来自微软,基于 GitHub Atom。


  • Rider:跨平台.Net IDE。


图像处理(Image Processing)

  • ImageResizer:在图片 URL 后面增加命令,在几毫秒内获取修改后的版本,支持实时的对图片进行缩放、编辑。
  • ImageProcessor:开源 .NET 库,用于实时处理图片。
  • DynamicImage:高性能开源图片处理库,用于 ASP.NET。
  • MetadataExtractor:从图片中提取 Exif、IPTC、XMP、ICC 等其它元数据信息。
  • Emgu CV:OpenCV 的 .NET 跨平台封装。


安装工具(Install Tools)

  • Wix Toolset:强大的工具集,用于创建你自己的 Windows 安装程序。
  • Squirrel:Squirrel 即是一套工具也是一个类库,可以无安全管理 Windows 桌面程序的安装和更新。


国际化(Internationalization)

  • i18n:ASP.NET MVC 智能国际化工具。


互操作(Interoperability)

  • CefSharp:Chromium Embedded Framework 的 .NET 支持(WPF 和 WinForm)。
  • CppSharp:在 C# 中平滑使用 C++ API 的工具。
  • Sharpen:Sharpen 是 db4o 编写的 Eclipse 插件,可以让你把 Java 项目转换为 C#。
  • CXXI:C++ 互操作框架。


IoC

  • Castle Windsor:Castle Windsor 是一个用于 .NET 和 Silverlight 的成熟的 控制反转(IoC) 容器。
  • Unity:轻量级、可扩展的依赖注入容器,支持构造函数、属性和方法调用注入。
  • Autofac:令人着迷的 .NET IoC 容器。
  • Ninject:.net 依赖注入的忍者。
  • StructureMap:.Net 最早的 IoC/ID 容器。
  • Spring.Net:Spring.NET 是一个开源应用程序框架,可以便捷地创建企业级 .NET 应用。
  • LightInject:一个超轻量级 IoC 容器。
  • TinyIoC:单文件、简单、跨平台的 IoC 容器。


日志(Logging)

  • Essential Diagnostics:为内置System.Diagnostics 命名空间扩展功能,提供更灵活的日志功能。
  • NLog:先进的 .NET 和 Silverlight 日志工具。
  • ELMAH:ELMAH 官方网站。
  • Elmah MVC:MVC 版 Elmah。
  • Logary:Logary 是一个 mono 和 .Net 平台下高性能、多目标的日志、度量、追踪和健康检查库。支持多目标,为微服务构建。
  • Log4Net:Apache log4net 工具库能够帮助程序员向多种不同的目标输出日志语句。
  • Serilog:一个 NoSQL 时代下简单直接的日志库。将多个优秀的传统结构化分析日志功能合并到一个易于使用的程序集中。
  • StackExchange.Exceptional:Stack Exchange 网络使用的错误处理程序。
  • Semantic Logging Application Block (SLAB):为内置
  • System.Diagnostics.Tracing 命名空间(EventSource类)扩展功能,支持将日志记录到多个容器中,包括 Azure 表存储、数据库、文件(JSON、XML、文本文件)。通过 ETW 支持进程内和进程外的日志记录,支持 Rx 进行实时的事件过滤和聚合。
  • Exceptionless:一个免费开源分布式系统的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技术栈的应用程序中,并且提供了Rest接口可以应用在 Javascript,Node.js 中。


机器学习和数据科学(Machine Learning and Data Science)

  • Accord.NET:机器学习框架,包含了音频和图像处理的库(计算机视觉、计算机听觉、信号处理和统计)。
  • Accord.NET Extensions:高级图像处理和计算机视觉算法扩展。
  • AForge.NET:为计算机视觉和人工智能领域的开发者和研究人员提供的框架(包括图像处理、神经网络、遗传算法、机器学习、机器人科学)。
  • Deedle:处理探索性数据的数据帧和时序库,支持 C# 和 F#。
  • FsLab:数据科学和机器学习库的集合,支持 F# 和 .NET。
  • numl:包含最流行的监督学习和无监督学习算法,尽量减少创建预测模型时的冲突。
  • R Provider:将 R 语言包和函数封装为类型安全的类型提供程序供 F# 调用。
  • F# Data:F# 类型提供程序,访问 XML、JSON、CSV 和 HTML 文件(基于样例文档),以及 WorldBank 数据。


Markdown 处理(Markdown Processors)

  • MarkdownSharp:C# 实现的开源 Markdown 处理器,在 Stack Overflow 中使用。
  • F# Formatting:用于生成 F# 和 C# 项目文档的工具。该工具库的核心组件中包含了可扩展的 Markdown 解析器。
  • CommonMark.NET:CommonMark 规范的 C# 实现,用于将 Markdown 文档转换为 HTML。为最佳性能和可移植性进行了优化。


邮件(Mail)

  • FluentEmail:System.Net.Mail 的一个流式(Fluent)封装,支持 razor 模板引擎。
  • MailKit:完整的跨平台的邮件协议栈,包括 IMAP、POP3、SMTP,支持验证等特性。基于 MimeKit 构建。
  • MimeKit:跨平台 .NET MIME 创建和解析库,支持 S/MIME、PGP、TNEF 和 Unix mbox spools。
  • PreMailer.Net:一个 C# 开发库,将你的样式表嵌入到内置的 style 属性中,最大限度支持邮件客户端。


数学(Mathematics)

  • MathNet:Math.NET 是一个开源项目,旨在创建和维护涵盖基础数学在内的工具集,面向高级和日常需要使用此类功能的 .Net 开发人员。


多媒体(Media)

  • TagLib#:TagLib#(即 taglib-sharp)是一个读写媒体文件元数据的库,支持视频、音频和照片格式。


度量(Metrics)

  • C# StatsD Client:Etsy StatsD 服务器的 C# 客户端。
  • App Metrics:开源跨平台 .NET 报表度量开发库。


微框架(Micro Framework)

  • .NET Micro Framework Interpreter:Microsoft® .NET Micro Framework(NETMF)是一个在 Visual Studio 中提供为小型设备上编写嵌入式应用的框架。


杂项(Misc)

  • .NET Fiddle:在浏览器中编写、编译并运行 C# 代码。相当于 C# 版本的 JSFiddle。
  • AzureCrawler:从 Angular、Ember、Durandal 或任何 JavaScript 应用中获取 HTML 快照。
  • BitSharp:C# 比特币节点。
  • CSScript:CS-Script 是一个基于 CLR 的脚本系统,使用 C# 作为编程语言。CS-Script 目前针对微软的 CLR 实现(.NET 2.0/3.0/3.5/4.0/4.5)并完整支持 Mono。附带很多附加特性,比如脚本宿主。


  • CsvHelper:帮助读写 CSV 文件的开发库。


  • FluentValidation:一个小型的 .NET 校验库,使用流式接口和 lambda 表达式构建校验规则。
  • Humanizer:Humanizer 能够在 .NET 平台上满足所有针对字符串、枚举、日期、时间、时间范围、数字等类型数据的操作和显示要求。
  • LINQPad:一个 C#/VB/F# 的便签本,能够立即执行任何表达式、语句块或程序,带有富文本显示等有用的特性。同样可以让你使用 LINQ 进行交互性数据库查询。 [$](译者注:也有免费许可,但是功能受限)。
  • Polly:快捷便利的异常处理策略,例如 重试、始终重试、等待并重试或断路(Circuit Break)等行为。 (.NET 3.5、4.0、4.5、PCL、Xamarin)
  • Rant:Rant 程序文本生成 DSL(领域特定语言)。


  • ScriptCS:使用文本编辑器、nuget 和强大的 Roslyn 来编写 C# 应用!
  • EntityFramework-Plus:Entity Framework 扩展,提供工具类、Bulk 操作、批处理/批量更新、查询缓存/过滤器/Future、审计等功能。


MVVM

  • Caliburn.Micro:小型但功能强大的框架,可以用来给所有 XAML 平台创建应用。它对 MV* 模式的强大支持可以让你快速构建你的解决方案,与此同时不必牺牲代码质量和可测试能力。
  • MVVM Light Toolkit:该工具箱主要是用来加速创建和开发 MVVM 应用,适用于 WPF、Silverlight、Windows Store(RT)和 Windows Phone 平台。
  • Catel:Catel 是一个应用开发平台,主要着眼在 MVVM(WPF、Silverlight、Windows Phone 及 WinRT)以及 MVC(ASP.NET MVC)。Catel 的核心部分包含 IoC 容器、模型、校验、备忘录模式(memento)、消息中介(message mediator)、参数检查等。
  • UpdateControls:Update Controls 不需要你实现 INotifyPropertyChanged 接口或声明一个 DependencyProperty。可以将控件直接关联到 CLR 属性,这使得它完美贴合 MVVM 模式。
  • ReactiveUI:一个 .NET 下的 MVVM 框架,集成了反应性扩展框架(Rx),允许开发者使用 WPF、Windows Store Apps、WP8 或 Xamarin 创建优雅的、可测试的应用。
  • Okra App Framework:一个以 app 为中心的 Windows 8.1 MVVM 框架,融合依赖注入,包含一套完整的 Visual Studio MVVM 模板。
  • WPF Application Framework (WAF):一个轻量级的框架,能够帮助你创建结构优雅的 WPF 应用。支持你使用分层架构和 MVVM 模式。
  • MVVMCross:跨平台mvvm 移动开发框架,针对 WP7 和 WP8 的 WPF/Silverlight、Android 的 Mono、iOS 的 MonoTouch 以及 WPA8.1/Windows 8.1 商店应用的 Windows Universal 项目。它使用可移植类库(PCL)来支持可维护的跨平台 C# 原生应用。
  • Stylet:最小化 MVVM 框架(参考 Caliburn Micro),包含了良好的文档、高覆盖率的测试以及自带的 IoC 容器。
  • Gemini:类似 Visual Studio Shell 的 IDE 框架。基于 WPF、AvalonDock 和 Caliburn Micro 构建。


Office

  • ClosedXML:ClosedXML 能够让开发人员更便捷地创建 Excel 2007、2010 文件。
  • NPOI:该项目是 .NET 版本的 POI 项目,原始的 Java 版本位于http://poi.apache.org/ 。
  • EPPlus:EPPlus 是一个 .net 类库,用于读写 Open Office Xml 格式的 Excel 2007、2010 文件(xlsx)。
  • Open XML SDK:Open XML SDK 是一个开源库,用于处理 Open XML 文档(包括 DOCX、XLSX 和 PPTX)。


ORM

  • Entity Framework:对象关系映射器(ORM)框架,让 .NET 开发人员使用领域特定的对象来处理关系型数据。
  • BL Toolkit:.NET 平台的业务逻辑工具箱。
  • Dapper:一个超小型、快捷轻便的 ORM 框架。
  • Dapper Extensions:小型类库,对 Dapper 的功能进行补充,为你的简单传统 CLR 对象提供基础的 CRUD(Get、Insert、Update、Delete) 操作。
  • NHibernate:NHibernate 对象关系映射器(移植自 Java 平台的 Hibernate)。
  • Fluent NHibernate:便捷、无需使用 XML、编译安全、自动化、基于约定命名的 NHibernate 映射库。
  • FluentMigrator:.net 下的便捷的迁移框架。
  • ServiceStack.OrmLite:轻量、简单、快速、基于命名约定的 POCO ORM。


  • Massive:小型、令人愉悦的数据访问工具,始终关爱你直到永远。


  • LINQ to DB:最快的 LINQ 数据库访问库,简单、轻量、快速、类型安全,在你的对象(POCO)和数据库之间搭建桥梁。


包管理(Package Management)

  • NuGet:.NET 包管理器。
  • MyGet:为 NuGet、NPM、Bower 和 VSIX 提供程序包仓库宿主,同样提供 CI 服务。
  • Paket:.NET 的一个包依赖管理器,支持 NuGet 包和 GitHub 仓库。


PDF

  • ITextSharp:iText 是一个PDF库,用于创建、修改、检查和维护 Portable Document Format(PDF)格式的文档 [$] 开源软件免费


Profiler

  • MiniProfiler:一个简单但有效的小型 profiler,用于 ASP.NET 网站。
  • Glimpse:开源 web 诊断平台。


推送通知(Push Notifications)

  • PushSharp:服务器端的推送通知类库,支持 iOS、OSX、Android、Chrome、Windows Phone、Windows 8、Backberry 和 Amazon 设备。


队列(Queue)

  • NServiceBus:.NET 平台下最流行的服务总线。
  • RabbitMQ.NET:AMQP 客户端的 C# 实现,通过 WCF 绑定到已有的 AMQP 服务。
  • NetMQ:NetMQ 是 ZeroMQ 纯 C# 移植版本。
  • MassTransit:MassTransit 是一个精简服务总线(lean service bus)的实现,使用 .NET Framework 来构建松耦合应用程序。
  • Rebus:Rebus 是一个 .NET 平台的精简服务总线和 NServiceBus、MassTransit类似,只不过更加精简。
  • EasyNetQ:易于使用的 RabbitMQ .NET API。
  • Warewolf ESB:易于使用的服务总线和微服务平台,可以在一个可视化 IDE 中便捷的创建应用和服务。
  • CAP:用于处理分布式事务的 .Net 标准开发库。支持 EventBus,轻量级、高效且易于使用。


响应式编程(Reactive Programming)

  • Rx.NET:Reactive Extensions (Rx)库使用观察者序列(observable sequences)和 LINQ 风格的查询操作,来进行异步和基于事件的程序开发。
  • Dynamic Data:用于集合的响应式编程框架。


计划调度(Scheduling)

  • QuartzNet:Quartz 是 .NET 平台的企业级调度器。
  • Hangfire:在 ASP.NET 应用中,超简单地实现自主引导(fire-and-forget)、延迟和周期重复任务。高级版需要收费。
  • Hangfire.Redis.StackExchange:Hangfire的redis扩展库,基于StackExchange.Redis的开源实现。
  • Azure WebJobs:Azure WebJobs 是Azure中App Services一个附属服务,为Azure中运行的Web App提供后台运行环境(支持多种语言编写Job),有.NET的SDK开源,并且可以直接添加扩展也开源。


SDK 和 API 客户端(SDK and API Clients)

  • AWS SDK:AWS SDK for .NET 让 .NET 开发者可以便捷地操作 Amazon Web Services。
  • Azure PowerShell:一组 PowerShell 命令行,让开发者和管理员开发、部署和管理 Microsoft Azure 应用。
  • Octokit.NET:.NET 平台下的 GitHub API 客户端库。
  • DropNet:Dropbox API 客户端开发库。


搜索(Search)

  • Elasticsearch .NET:Elasticsearch.Net & NEST。
  • PlainElastic.Net:ElasticSearch 的一个简单的 .Net 客户端。
  • SolrNet:.Net 平台下的 Solr 客户端。
  • Lucene.net:Lucene.Net 是 Lucene 搜索引擎库的移植,使用 C# 编写,面向 .NET 环境的用户。


序列化(Serialization)

  • Protobuf.NET:Protocol buffers 是 Google 使用的二进制序列化格式,在 Google 数据通讯中大量使用。
  • Json.NET:.NET 平台下流行的、高性能 JSON 框架。
  • ServiceStack.Text:在 servicestack.net 中使用的 JSON、JSV、CSV 文本序列化器。
  • Msgpack-Cli:MessagePack 的 CLI 实现。
  • Jil:.NET 平台下快速的 JSON 序列化器,基于 Sigil (在 StackOverflow 中使用)。
  • ProtoBuf:根据 .proto 规范,为 protocol buffer 序列化内容生成 C# 代码。
  • F# Data:F# 类型提供程序,访问 XML、JSON、CSV 和 HTML 文件(基于样例文档),以及访问 WorldBank 数据。
  • Bond:跨平台框架,用于处理系统化(schematized)数据。支持跨平台的序列化、反序列化,以及强大的通用机制来高效处理数据。


状态机(State machines)

  • Stateless:直接使用 .NET 代码创建一个状态机和轻量的基于状态机的工作流。
  • Automatonymous:.Net 平台的状态机库,允许你编写流式API风格的状态机。

静态网站生成(Static Site Generators)

  • Pretzel:.NET 平台下的网站生成工具(包含后续的一些功能)。
  • Sandra.Snow:.NET 平台的静态网站生成工具,借鉴 Jekyll。
  • Wyam:简单易用、高度模块化、拥有强大配置能力的静态网站生成工具。


风格指南(Style Guide)

  • C# Style Guide:StackOverflow 上的C#风格指南 Q & A。
  • C# Coding Conventions:MSDN 官方的 C# 代码约定。


模板引擎(Template Engine)

  • RazorEngine:基于微软 Razor 解析器引擎的开源模板引擎。
  • Nustache:无逻辑模板的开源库。
  • DotLiquid:Ruby Liquid 模板语言的 C# 移植版本。


测试(Testing)

  • AutoFixture:AutoFixture 是一个用于 .NET 的开源框架,用于简化单元测试中的设置(Arrange)阶段。
  • FakeItEasy:.NET 平台的一个简单的 mocking 库。
  • Fluent Assertions:一组 .NET 扩展方法,可以让你更自然地指定 TDD 或 BDD 风格测试的期望值。
  • Fuchu:F# 的单元测试库,通过 tests-as-values 机制让你更容易创建领域特定语言(DSL)。
  • Machine.Specifications:Machine.Specifications (MSpec)是一个上下文、规范框架,忽略了语言本身的干扰,简化了测试。
  • Moq:.NET 平台下最流行和友好的 mocking 框架。
  • NBuilder:快速创建测试对象。
  • NSubstitute:一个友好的 .NET mocking 框架。
  • NUnit
  • Rhino Mocks:.NET 平台的动态 Mocking 框架。
  • Shouldly:Shouldly 是一个断言(assertion)框架,主要功能是在断言失败时,给出简单明了并且友好的错误信息。
  • SpecFlow:将业务需求绑定到 .Net 代码。
  • xUnit:xUnit.net 是一个 .NET 平台下免费、开源、专注社区的单元测试框架。
  • BenchmarkDotNet:功能强大的基础测试 .NET 开发库。


交易(Trading)

  • Lean:Lean 引擎是一个开源的,完全由 C# 托管代码编写的交易算法引擎,用于桌面和云端。
  • StockSharp:交易和算法交易(algorithmic trading)的开源平台(用于股票市场、外汇市场、比特币和期权交易)。


Visual Studio 插件(Visual Studio Plugins)

  • Web Essentials:Web Essentials 为 Visual Stduio 扩展了大量的特性,提供了 web 开发人员盼望多年的功能。
  • VsVIM:Visual Studio 中的 VIM。
  • Nuget Package Manager:NuGet 是微软开发平台(包括 .NET)的包管理器。
  • SideWaffle:Visual Studio 2012、2013 中的一组项目模板集合,让 web 开发人员更加轻松。


  • Resharper:Visual Studio 开发人员生产力工具 。


  • Refactoring Essentials:开源 C# 和 VB.NET 重构扩展,包括代码最佳实践分析器。


  • CodeContracts:.NET CodeContracts 工具源代码。


  • Git Diff Margin:在 Visual Studio 滚动条区域实时显示当前文件在 Git 上的差异。


  • Productivity Power Tools:一组 Visual Studio 专业版(及更高版本)的扩展,用于提高开发人员的生产力。


Web 框架(Web Frameworks)

  • ASP.NET MVC:ASP.NET 是一个免费的 web 框架,用于创建优秀的 web 站点和应用程序。
  • FubuMVC:.NET 平台下前端控制器(front-controller)风格的 MVC 框架。


  • NancyFx:在 .Net 和 Mono 平台上创建 HTTP 服务的一个轻量级、非正式的框架。


  • IISNode:在 IIS 中宿主 NodeJS 应用程序。
  • Suave.IO:一个框架/库/web 服务器,当你看到你使用优美的 F# 编写的代码提前完成了你的项目时,它的存在会让你喜极而泣。(一个用 F# 编写 Web 应用的框架和服务器端)


Web 服务器(Web Servers)

  • EmbedIO:基于 Mono 编写的跨平台的 Web 服务器。
  • XSP:Mono 中的 ASP.NET 宿主服务器。该模块包含了 Apache 模块、FastCGI 模块,可以用于挂载到其它 web 服务器或是作为一个测试用的独立服务器存在(类似微软的 Cassini 项目)。
  • Jexus:强劲、坚固、免费、易用的Linux ASP.NET服务器。


WebSocket

  • SignalR:ASP.NET 库,开发者可以通过它在 web 应用程序中非常简单地实现实时功能。
  • Fleck:Fleck 是一个 C# 实现的 WebSocket 服务器。分支自 Nugget 项目。
  • Websocket-Sharp:WebSocket 协议的 C# 实现,包含客户端和服务器端。
  • XSockets:提供了一组工具,可以在微软 .NET 等平台上构建一个实时应用程序。
  • WebSocket4NET:.NET 2.0+、Xamarin、Mono、Silverlight、Windows Phone 以及 WinRT 下的 WebSocket 客户端。
  • SuperSocket:一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。


Windows 服务(Windows Services)

  • TopShelf:一个简单的服务宿主框架,使用 .NET 构建 Windows 服务。


通讯框架(Communication Frameworks)

  • DotNetty:一个快速开发高性能、高可靠性的非阻塞的事件驱动网络应用框架。
  • Helios:一套高性能的Socket通信中间件。


  • enode: 一个用来开发DDD、CQRS、EDA 以及事件驱动应用程序的框架。


其他列表(Other Lists)

  • .NET-libraries-that-make-your-life-easier:开源的 .NET 库,让你的生活更加轻松。
  • awesome-LINQ:一组精心挑选的超棒的 LINQ 类库、工具等。


看完本文有收获?请转发分享给更多人!!!欢迎大家点赞,留言讨论,喜欢这篇文章可以分享给更多人,关注我每天更新分享有关程序员、科技、编程之类的文章!!!爱你们,,么么哒,,让我们一起愉快的玩耍把!!!

、深浅拷贝的区别有哪些?

要说 js 的深浅拷贝,就不得不提 js 的两大数据类型:基本数据类型和引用类型。基本数据类型的变量名和值都存储在栈中,对于引用类型的变量名存储在栈中,而值存储在堆中。由于存储方式不同,所以导致了他们复制的时候方式不同。

浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精准拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果是引用类型,拷贝的就是内存地址,所以如果其中一个对象改变了这个地址,就会影响到另外一个对象。

深拷贝是将一个对象从内存中完整的拷贝一份出来,从内存堆中存放一个新的对象。这是两个对象,所以修改其中一个,另外一个不会受影响。

深浅拷贝主要针对的是引用类型,简单数据类型不受影响。

相关笔试题

var person = {
 name:"前端人",
 hobby:['学习','敲代码','潜水']
}
function copy(source){
 var newObj = new Object()
 for(var i in source){
  if(source.hasOwnProperty(i)){
   newObj[i] = source[i]
   }
  }
 return newObj
}
var p1 = copy(person);
p1.name = "Web Person"
console.log(person.name)
console.log(p1.name)
p1.hobby = ["内卷"]
console.info(person.hobby)
console.info(p1.hobby)
/*运行结果:
前端人
 Web Person
["学习", "敲代码", "潜水"]
["内卷"]
*/

2、js 数据类型有哪些?

js 数据类型一共有 8 种,分为两大类:基本类型和引用类型。

它们的数据类型分别为:

基本类型:string、number、boolean、null、undefined、symbol、bigint

引用类型:object

相关面试题

// 注意:其他类型与数值进行相加时,其他类型的转为 number 类型
console.log( true+1 ) // 2
console.log( undefined +1 ) // NaN

console.log( null ) //object
console.log( undefined ) // undefined

3、延迟加载 js 的方式有哪些?有什么区别呢?

共有 6 种方式,分别为:

  • async
  • defer
  • js 最后加载
  • 利用 setTimeout
  • 动态创建 DOM 的方式
  • 使用 jQuery 的 getScript 方法

它们的区别介绍:

1、async:为 <script>标签定义了 async 属性。async 和 html 解析是同步的,不是顺次执行 js 脚本,谁先加载完成先执行谁。

<script  async type="text/javascript" src="demo1.js" ></script>
<script  async type="text/javascript" src="demo2.js" ></script>

2、defer 会等到 html 解析完成之后再执行 js 代码,如果有多个脚本时,会按照顺序依次执行脚本。

<script  defer type="text/javascript" src="demo1.js" ></script>

3、js 最后加载

把 js 外部引入的文件放置在页面的底部,让 js 最后加载,从而加快页面加载速度。

4、利用 setTimeout

5、动态创建 DOM 的方式

var element = document.createElement("script");  
element.src = "box.js";  
document.body.appendChild(element);

这种方式通过操作动态加载 js 文件,不触发的时候不加载,减少页面文件大小,加快加载速度。

6、使用 jQuery 的 getScript 方法

$.getScript( "box.js",function(){//回调函数,成功获取文件后执行的函数  
      console.log("脚本加载完成")  
});

相关面试题:

<!doctype html>
<html>
 <head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script type="text/javascript" src="box.js"></script>
 </head>
 <body>
  <div id="box"></div>
 </body>
</html>

//box.js 代码如下
console.log( document.getElementById('box') )  // null

box.js 想正常获取元素 box ,并进行一系列操作应该如何延迟加载 js 文件呢?

4、你对作用域的认识有多少?

作用域通俗地讲,就是指一个变量的作用范围。分为全局作用域和函数作用域。

全局作用域

  • 页面打开时被创建,页面关闭时被销毁。
  • 编写在 script 标签下的变量和函数,作用域为全局,页面的任意位置都可以访问
  • 有全局对象 window ,代表浏览器窗口,全局作用下的变量和函数作为 window 的属性和方法

函数作用域(局部)

  • 函数是被调用时创建的,执行完毕之后销毁。
  • 函数每调用一次,变量和函数就会重新创建一次,它们之间是相互独立的
  • 在函数作用域内可以访问到全局变量或函数,但是在函数外无法访问函数作用域内的变量
  • 函数作用域内访问变量,会在自身作用域内寻找,若没有则会向上一级作用域内查找,一直到全局作用域。

函数在被调用的时候会先进行预编译:

全局作用域预编译:

  • 创建上下文 GO 对象。
  • 找变量声明,将变量名作为 GO 对象的属性名,值为 undefined
  • 找函数式声明,将值赋予函数体

函数作用域预编译:

  • 创建上下文 AO 对象
  • 将形参和实参作为 AO 对象的属性,赋值为 undefined
  • 实参和形参相统一
  • 在函数体内找函数声明,将值赋予函数体。

相关面试题:

<script type="text/javascript">
 function fn(a,c){
  console.log(a)
  var a = 12
  console.log(a)
  console.log(c)
  function a(){ }
  if(false){
   var d = 34
  }
  console.log(d)
  console.log(b)
  var b = function(){}
  console.log(b)
  function c(){}
  console.log(c)
 }
 fn(1,2)
</script>
// 运行结果:
/*
function a(){}
12
function c(){}
undefined
undefined
function (){}
function c(){}
*/

5、null 和 undefined 的区别。

null 和 undefined 两个都表示无的值。

作者设计 js 的时候,借鉴的 java 语言先设计的 null 。null 使用的时候会被隐式转化成 0,不容易发现错误。

console.log( number(null) ) //0

undefined 是为了填补 null 的坑。所以后来又新增了 undefined 。

console.log( number(undefined) ) //NaN

6、new 操作符具体做了什么?

  • 创建了一个空对象。
  • 将空对象的原型指向于构造函数的原型。
  • 将空对象作为构造函数的上下文。
  • 对构造函数有返回值的处理判断。

实现 new 操作符的方法:

function create( fn,...args ){
 var obj={}
 Object.setPrototypeOf( obj,fn.prototype )
 var resault = fn.apply(obj,args)
 return (resault instanceof Object) ? result : obj
}

7、为什么会有闭包?它解决了什么问题?

7.1、什么是闭包?

闭包就是函数嵌套函数,通过函数内的函数访问变量的规则,实现外部访问函数内的变量。

7.2、闭包的特点:

  • 函数嵌套函数。
  • 函数内部可以引用函数外部的参数和变量。
  • 参数和变量不会被垃圾回收机制回收。

实例3:闭包解决问题

var liArr = document.getElementsByTagName('li')
for(var i=0;i<liArr.length;i++){
 (function(i){
  liArr[i].onclick = function(){
   console.log('点击元素',liArr[i])
  }
 })(i) 
}

7.3、闭包优点:

  • 保护变量安全,实现封装,防止变量声明冲突和全局污染。
  • 在内存当中维持一个变量,可以做缓存。
  • 匿名函数自执行函数可以减少内存消耗。

防抖和节流就是闭包的经典应用。

7.4、闭包缺点:

  • 变量会驻留在内存中,造成内存损耗问题。解决办法:把闭包函数设置为 null 。
  • 内存泄漏

8、防抖和节流,你了解多少?

8.1、什么是防抖函数?

当持续触发事件,一定时间内没有再触发事件,事件处理函数才会执行一次,如果在设定的时间到来之前又触发了事件,就会重新计时。

防抖函数常见的实际应用:使用 echart 的时候,浏览器 resize 时,需要重新绘制图表大小,还有典型的输入框搜索应用。

8.2、节流函数是什么?

当持续触发事件的时候,保证一段时间内只调用一次事件处理函数,一段时间内,只允许做一件事情。

防抖和节流主要是用来限制触发频率较高的事件,再不影响效果的前提条件下,降低事件触发频率,减小浏览器或服务器的压力,提升用户体验效果。

9、数组去重有几种方法?

方法1: new set()

return Array.from(new Set(arr))
// 或
return [...new Set(arr)]

方法2:使用两次循环

for(var i=0,len=arr.length;i<len;i++){
 for(var j=i+1,len=arr.length;j<len;j++){
  if( arr[i]===arr[j] ){
   arr.splice(i,1)
   j--;
   len--
  }
 }
}
return arr

方法3:indexOf 实现

let arr1 = []
for(var i=0;i<arr.length;i++){
 if( arr1.indexOf(arr[i]) === -1 ){
  arr1.push(arr[i])
 }
}
return arr1

方法4:includes 实现

let arr1 = []
for(var i=0;i<arr.length;i++){
 if( !arr1.includes(arr[i]) ){
  arr1.push(arr[i])
 }
}
return arr1

方法5:filter 实现

array.indexOf(item,start) start 表示开始检索的位置。

return arr.filter(( item, index )=>{
 return arr.indexOf( item, 0 ) == index
})

10、call、bind 和 apply 的区别

三者都是改变函数执行的上下文,即改变 this 指向。

它们之间的区别为:

  • call 和 apply 会立即执行,bind 返回的是一个函数,需调用后执行。
  • 第二参数是传入要执行的方法中的参数,call 和 bind 是独立传递参数,apply 是以数组传递参数的

使用场景:
1、需要改变某个函数的this指向时
2、当参数较少时可以使用call,参数较多可以使用apply以数组的方式传递
3、当需要重复调用时,可以使用bind新定义一个方法

11、js 判断变量是不是数组,你能写出几种方法?

方法1:isArray

var arr = [1,2,3]
console.log(Array.isArray(arr))    

方法2:instanceof

var arr = [1,2,3]
console.log( arr instanceof Array )
console.log( arr instanceof Object )

该方法不够严谨。

方法3:prototype

console.log( Object.prototype.toString.call(arr).indexOf('Array')>-1 )

方法4:isPrototypeOf

console.log( Array.prototype.isPrototypeOf( arr ) )

方法5:constructor

console.log(arr.constructor.toString().indexOf('Array')>-1 )

12、slice 是干嘛的? splice 是否会改变原数组?

slice 是用来截取字符串的,返回一个新数组,但不会影响原数组。

使用语法:

arr.slice( start , end )

截取 arr 数组,从 start 开始到 end 结束,第二个参数是可选参数,没有时从 start 开始截取到结尾。

如果 start 参数是负数时,就会从 arr.lengtn + start 开始截取到结束。

var arr = ['a','b','c','d','e']
console.log( arr.slice(-3) ) // ["c", "d", "e"]
console.log(arr)  //["a", "b", "c", "d", "e"]

splice 是一个更强大的方法,可以添加、删除、替换数组元素,返回的是被删除元素,它的操作会改变原数组。

使用语法:

splice( start, n, new )

从 start 开始,删除 n 个元素,然后把 new 添加到 start 元素之后。第三个参数为可选参数

  • n 为 0 且第三个参数不为空时,表示添加新元素到 start 之后。
  • n 不为 0 且第三个参数不为空时,表示把 start 之后的 n 个元素替换成 new 。
  • n 不为 0 且第三个参数为空时,表示删除 start 后的 n 个元素。
var arr = ['a','b','c','d','e']
var ar = arr.splice( 1, 1 ,'f','g')
console.log('ar',ar)    // ["b"]
console.log('arr',arr) //  ["a", "f", "g", "c", "d", "e"]

13、== 和 === 有什么不同?

== 比较的是值,=== 除了比较值,还比较类型。

console.log( [1,2]=='1,2'  )       // true
console.log( [1,2] === '1,2'  )  //false

valueOf 方法返回 Math 对象的原始值,通常由 javascript 在后台自动调用,并不显示的出现在代码中。

console.log([1,2].valueOf()) //[1,2]
console.log('1,2'.valueOf()) //[1,2]
// 所以
console.log( [1,2]=='1,2'  )  // true

不管是字符串和数字比较,还是布尔值和数字比较,都会使用 valueOf 隐式转换。

总结:== 需要使用 valueOf() 进行隐式转换,所以性能差。 === 会避开一些不必要的麻烦。

14、this 的指向

大厂笔试题:

var name = 'window name'
var p1 = {
 name:'p1 name',
 showName:function(){
  console.info(this.name)
 }
}
var fn = p1.showName
fn()
p1.showName()
var p2 = {
 name:'p2 name',
 showName:function(fun){
  fun()
 }
}
p2.showName(p1.showName)
p2.showName = p1.showName
p2.showName()
/*
运行结果:
window name
 p1 name
 window name
 p2 name
*/

这是一道关于 this 指向的面试题,接下来我们就说说 this 是如何指向的?

this 对象是运行时基于函数的执行环境绑定的:

  • 在全局函数中,this 等于 window 。
  • 函数上下文调用,严格模式下 this 为 undefined ,非严格模式下,this 指向 window 。
  • 当函数被作为某个对象的方法被调用时,this 等于那个对象。如果使用 call apply 改变当前 this 时,将会指向为传递过来的那个 this 。
  • 匿名函数的执行环境具有全局性,因此 this 指向 window。
  • 构造函数内的 this 指向创建的实例对象。
  • dom 事件处理函数,this 指向触发该事件的元素。
  • setTimeout 和 setInterval 中的 this 指向全局变量 window

15、js 中的继承有哪些方式呢?

第 1 种:原型链继承

function Parent(){
 this.name = "前端人"
}
Parent.prototype.showName = function(){
 console.log(this.name)
}
function Child(){}
 //原型链继承   
Child.prototype = new Parent()
var p = new Child()
console.dir(p.name) //前端人

特点:

  • 实例的是子类的实例,也是父类的实例。
  • 父类新增原型方法和属性,子类都能访问到。
  • 简单,方便实现

第 2 种:借用构造函数

function Animal (name) {
 this.name = name || 'Animal';
 this.sleep = function(){
  console.log(this.name + '正在睡觉!');
 }
}
Animal.prototype.eat = function(food) {
 console.log(this.name + '正在吃:' + food);
};
function Cat(name){
 Animal.call(this);
 this.name = name || 'Tom';
}
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

特点:

  • 创建子类时,可以向父类传递参数。
  • 可以实现多继承,call 多个父类对象。
  • 解决方法1中,子类实例共享父类引用属性的问题。

还有组合式继承、ES6 的继承 和 寄生组合继承等等。每种继承方式都有各自的特点和缺点。

16、严格模式与非严格模式的区别,你了解多少?

JavaScript 语言是一门弱类型语言,存在许多类型错误,因此 ES6 引入了严格模式概念。

如果不加 ‘use strict’ 常规模式下就是属于非严格模式。

严格模式

在 js 文件顶部添加 ‘use strict’ 就属于严格模式,严格模式也可以指定在函数内部。

<script>
 'use strict'  
 //或者函数内部
 (function(){
  'use strict'
 })()
</script>

严格模式,是为 js 定义来了一种不同的解析与执行模型,在严格模式下,ECMAScipt 3 中一些不解和不确定的行为将得到处理,而且会对不安全的操作会抛出异常。‘use strict’ 会告诉浏览器引擎可以切换到严格模式执行。

严格模式与非严格模式区别

严格模式

非严格模式

变量必须声明才能赋值

变量不进行声明,可直接赋值

不能使用 delete 字符删除变量或对象

可以使用 delete 删除

函数参数变量名不允许重复

变量名重复,获取最后最后那个值

普通函数内的 this 为 undefined

普通函数内的 this 为 window

不允许使用八进制

允许任意进制

eval 和 arguments 当做关键字,不能被赋值和用作变量名

可以使用 eval 、arguments 作为变量名

call、apply 传入 null undefined 保持原样不被转为window

默认转为 window 对象

限制对调用栈的检测能力,访问 arguments.callee 会抛出异常

arguments.callee 运行正常

17、隐式转化相关面试题

console.log( '2'>10 ) //false
console.log( '2'>'10' ) //true
console.log( 'abc'>'b' ) //false
console.log( 'abc'>'aab' ) //true
console.log( undefined == null ) //true
console.log( NaN == NaN )//false
console.log( [] == 0 ) //true
console.log( ![] == 0 ) //true
console.log( [] == [] ) //false
console.log( {} == {} ) //false
console.log( {} == !{} ) //false

18、事件循环机制相关面试题。

阿里面试题1:

<script type="text/javascript">
 var p =new Promise(resolve=>{
  console.log(4)
  resolve(5)
 })
 function f1(){
  console.log(1)
 }
 function f2(){
  setTimeout(()=>{
   console.log(2)
  },0)
  f1()
  console.log(3)
  p.then(res=>{
   console.log(res)
  })
 }
 f2()
</script>
// 运行结果 4 1 3 5 2
// 如果已经了解事件运行机制,就可以跳过该问题了

事件循环机制,event-loop 。包含三部分:调用栈、消息队列、微任务队列。

事件循环开始的时候,会从全局一行一行的执行代码,遇到函数调用的时候,就会压入调用栈中,当函数执行完成之后,弹出调用栈。

// 如:代码会一行一行执行,函数全部调用完成之后清空调用栈
function f1(){
 console.log(1)
}
function f2(){
 f1()
 console.log(2)
}
f2()
// 执行结果 1 2

如果遇到 fetch、setInterval、setTimeout 异步操作时,函数调用压入调用栈时,异步执行内容会被加入消息队列中,消息队列中的内容会等到调用栈清空之后才会执行。

// 如:
function f1(){
 console.log(1)
}
function f2(){
 setTimeout(()=>{
  console.log(2)
 },0)
 f1()
 console.log(3)
}
f2()
// 执行结果 :1 3 2

遇到 promise、async、await 异步操作时,执行内容会被加入微任务队列中,会在调用栈清空之后立即执行。

调用栈加入的微任务队列会立即执行。

如
let p =new Promise(resolve=>{
 console.log('立即执行')
 resolve(1) //在 then 调用中执行
})

微任务队列中内容优先执行,所以比消息队列中的内容执行得早。

了解这些知识后,再试一下最前面的那道面试题,应该就没什么问题了。

20、前端领域内,你比较擅长什么?

这个问题就留给读到最后,能够坚持学习的人,问问我们自己有什么是我们擅长的?在哪块领域是我们占据竞争优势的?

.昨日回顾

编号姓名性别学历毕业院校
1张三大专中国人民大学
2李四
3

<table>

<tr>

<th>编号</th>

<th>标题</th>

<th>发布日期</th>

</tr>

<tr>

<td>1</td>

<td>重蔚自留地</td>

<td>2014-10-20</td>

</tr>

</table>

如果使用表格来排版网页,搜索引擎搜互的几乎很低。

DIV+CSS布局或排版网页,层级一般为3层左右。

HTML网页是一个结构化的文档,是一按层次顺序展示的一个文档。

<table>的子元素(标记)是<tbody>,而不是<tr>

<tr>是<tbody>的子元素

2.表单

1、表单的主要功能:就是用来搜索用户信息。

2、表单的工作原理

用户填写有表单的网页,单击某个按钮进行提交;

用户填写的表单数据,将发到服务器;

服务器上有专门的程序来对用户提交的数据进行验证;

如果有错误,服务器会返回给浏览器一个错误信息;

如果没有错误,PHP程序会将用户提交的数据写入数据库,并返回一个成功的信息。

补充:

用户输入的信息是否正确,比如:邮箱地址、电话号码、用户名是否重名等

这些信息都是由PHP后台程序来做验证。

3<form>标记:是一组标记(多个标记)

<form name=“form1” action=“login.php”>

用户名:<input type=“text” name=“username” size=“50” />

密码:<input type=“password” name=“password” size=“50” />

<input type=“submit” name=“submit” value=“提交” />

</form>

注意:所有表单元素都必须放在<form>中,然后一起提交给服务器。

<form>的常用属性

Name:指表单的名称,这个名称一般给JS或PHP来用。

比如:要获取“用户名”框中输入的信息,用JS获取是:document.form1.username.value

Action:设置表单数据的处理程序文件名;比如:login.php

Method:表单数据的提交方式。有两种方式:GET和POST

默认的提交方式:就是GET方式。

GET方式:将表单中的数据(以“名称/值”)形式,追加到表单处理程序(action指定)的末尾。

缺点:提交少量信息、不太安全、只能提交简单的数据,一般可以提交100个字节内的数据

http://www.sina.com.cn/news.php?id=234

POST方式:将表单数据直接发放ACTION指定的处理程序,并没有在地址栏显示。

优点:提交海量数据、相对比较安全、提交的数据类型多样化

Enctype:是指表单数据的编码方式(加密方式)

Application/x-www-form-urlencoded 普通的加密方式(默认)

Multipart/form-data 只有上传文件时使用。

  • 单行文本框:用户名、地址、联系方式、邮编等

<input type=“text” name=“名称” value=“默认值” size=“多少个字符宽” maxlength=“最多可放多少个字符” />

注意:如果要把表单元素排齐,请使用表格来排,排的顺序是<form>标记中嵌<table>,<td>中放每一个表单元素。

2、单行密码框:密码框中的内容是以“*”号显示,是为了保证数据的安全

<input type=“password” name=“名称” size=“字符宽” maxlength=“最大字符数” />

3、按钮

提交铵钮:<input type=“submit” name=“submit” value=“提交按钮” />

重置按钮(清空):<input type=“reset” name=“reset” value=“重新填写” />

图片按钮:<input type=“image” src=“图片URL” value=“值” />

注意:图片按钮默认是提交表单

普通按钮:<input type=“button” name=“名称” value=“按钮文本” />

<input type="button" value="普通按钮" onclick="javascript:this.form.reset()" />

注意:普通按钮没有任何功能,一般要结合JS来实现提交或重置。

提示:如果哪一个表单项,不想让它提交到服务器,请不要给它添加name属性即可。

4、单选按钮:一组相互排斥的按钮,也就是每一次只能选择一个。

<input type=“radio”name=“名称” value=“值”checked=“checked />男

注意:一组单选按钮的name值是一样的,最后只能提交选中的哪一个。

5、复选框:一组复选框的名称也是一样的,在后台获取值时,将使用“数组”的形式来获取。

<input type=“checkbox”name=“名称”value=“值”checked=“checked” />游戏

注意:复选框可以同时选择多个,也可以一个都不选。

提示:数组是一个名字里,可以存放多个不同的值(了解)

JS数组:Var hobby = [“游戏”,“美术”,“电脑”]

6、下拉列表

<select name=“edu”>

<option value=“” selected=“selected”>请选择……</option>

<option value=“高中”>高中</option>

<option value=“大专”>大专 </option>

</select>

7、文本区域

<textarea name=“名称”rows=“几行高”cols=“多少个字符宽”></textarea>

提示:如果要在<textarea>中插入图片,实现图文混排,这个标记做不到。一般网站的效果都是通过“在线HTML代码编回器”实现的。比如:FCKEdit(就业班讲)

8、上传文件

<input type=“file”name=“uploadFile” />

注意:value属性是只读属性,是为了保证网站的安全。

GET方式上传不了文件,

只有POST能上传文件,并且编码类型设置为:mulitpar/form-data

3.框架

1、框架的概念:将一个浏览器窗口划分若干个区域,每个区域都是一个独立的小窗口,小窗口中存放一个网页文件。

框架相当于一个窗户。一个窗户由窗格和玻璃构成。一个框架是由框架集(Frameset)和框架页(Frame)构成。

<frameset>中定义框架的结构(上下型、左右型)、大小、位置等。

<frame>中定义小窗口是否显示滚动条小窗口是否可以改大小、默认显示的网页

在框架定义页面中,不能出现<body>及<body>的子标记,换句话说,<frameset>和<body>只能选择其中一个。

2、框架的代码结构

<frameset>

<frame />

<frame />

</frameset>

3、<frameset>的常用属性

Rows:指定框架为上下型,例如:rows=“180,*”,上窗口的高为180px,剩下都给下窗口。

Rows=“180,20,*”,顶窗口高为180px,中窗口高为20px,剩下高都给下窗口。

Rows=“20%,50%,*”

Cols:划分框架为左右型,例如:cols=“200,*”,左窗口宽为200px,剩下都给右窗口。

Cols=“200,10,*”

Frameborder:是否显示框架边线,取值:1或0,yes或no

Border:指定边框的粗细

Bordercolor:边框的颜色

Framespacing:指框架边框间的距离

4、<frame>的常用属性:主要定义:是否可以调整大小、是否显示滚动条、默认页设置

Src:设置小窗口中显示的默认网页;

Noresize:是否可以调整窗口的大小,取值:noresize

Scrolling:是否显示滚动条,取值:yes、no、auto(自动)

Name:设置每个小窗口的

Index.html

4.行内框架<iframe></iframe>

<iframe>是<body>的子元素

<ifame>是嵌套到<body>元素中的。

常用属性

Src:引入哪个HTML文件

Width:指行内框架的宽度

Height:指行内框架的高度

Scrolling:是否显示滚动条

Align:水平对齐方式