Blazor 是一个相对较新的框架,用于构建具有 .NET 强大功能的交互式客户端 Web UI。一个常见的用例是将现有的 Excel 文件导入 Blazor 应用程序,将电子表格数据呈现给用户,并且能够允许进行任何更改,最后将该数据导出回 Excel 文件或将其保存到数据库。
以下是在 Blazor 中导入/导出电子表格文件的步骤:
SpreadJS 是一个非常强大且可扩展的 JavaScript 电子表格组件,它使这个过程变得更加简单。
在将 SpreadJS 放入 Blazor 应用程序之前,我们必须首先创建一个 Blazor 组件来包含 SpreadJS。
在本教程中,我们将使用 Visual Studio 2022 和 SpreadJS V16.0。
要创建组件,首先要创建一个 Razor 类库:
为简单起见,您可以将其命名为“SpreadJS_Blazor_Lib”:
创建项目后,我们需要将 SpreadJS 文件复制到“wwwroot”文件夹:
创建这个项目还应该创建一个名为“exampleJSInterop.js”的文件,因此我们需要对其进行编辑以添加有助于将 C# 代码连接到 SpreadJS 的 JavaScript 代码的逻辑:
// This file is to show how a library package may provide JavaScript interop features // wrapped in a .NET API window.sjsAdaptor = { init: function (host, config) { if (config.hostStyle) { var hostStyle = config.hostStyle; var styles = hostStyle.split(';'); styles.forEach((styleStr) => { var style = styleStr.split(':'); host.style[style[0]] = style[1]; }); delete config.hostStyle; } return new GC.Spread.Sheets.Workbook(host, config); }, setValue: function (host, sheetIndex, row, col, value) { var spread = GC.Spread.Sheets.findControl(host); if (spread) { var sheet = spread.getSheet(sheetIndex); sheet.setValue(row, col, value); } }, openExcel: function (host, inputFile) { var spread = GC.Spread.Sheets.findControl(host); if (spread) { var excelIO = new GC.Spread.Excel.IO(); excelIO.open(inputFile.files[0], function (json) { spread.fromJSON(json); }) } } };
该应用程序还应该创建一个默认的“Component1.razor”文件,我们可以将其重命名为“SpreadJS.razor”。这将是我们将用作包装器的组件:
@using Microsoft.JSInterop @inject IJSRuntime JSRuntime <div @ref="host"></div> @code { [Parameter] public int SheetCount { get; set; } [Parameter] public string HostStyle { get; set; } private ElementReference host; public void setValue(int sheetIndex, int row, int col, object value) { JSRuntime.InvokeVoidAsync("sjsAdaptor.setValue", host, sheetIndex, row, col, value); } public void OpenExcel(ElementReference inputFile) { JSRuntime.InvokeVoidAsync("sjsAdaptor.openExcel", host, inputFile); } protected override void OnAfterRender(bool firstRender) { if (firstRender) { JSRuntime.InvokeVoidAsync("sjsAdaptor.init", host, new Dictionary<string, object>() { { "sheetCount", SheetCount}, { "hostStyle", HostStyle } }); } } }
现在我们已经使用 SpreadJS 创建了一个组件,我们可以在 Blazor 应用程序中使用它。首先,我们可以使用“Blazor WebAssemblyApp”模板添加一个新项目:
要添加 SpreadJS 组件,我们需要在解决方案资源管理器中右键单击这个新项目的依赖项,然后单击“添加项目引用”。我们的 SpreadJS_Blazor_Lib 应该列为选项之一:
在这个新项目中,应该有一个页面文件夹,其中包含几个不同的 razor 文件。在此,我们将要编辑 Index.razor 文件以设置 HTML 的代码隐藏:
@page "/" @using SpreadJS_Blazor_Lib <h1>Hello, SpreadJS!</h1> <SpreadJS SheetCount="3" HostStyle="@HostStyle" /> @code { private string HostStyle { get; set; } = "width:90wh;height:70vh;border: 1px solid darkgray"; } 现在我们可以编辑“wwwroot”文件夹中的index.html文件。在这个文件中,我们可以添加对 SpreadJS JavaScript 和 CSS 文件的引用: (index.html) <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>BlazorApp1</title> <base href="/" /> <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" /> <link href="css/app.css" rel="stylesheet" /> <link href="http://cdn.grapecity.com/spreadjs/hosted/css/gc.spread.sheets.excel2013white.16.0.5.css" rel="stylesheet" /> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/gc.spread.sheets.all.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.charts.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.shapes.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.slicers.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.print.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.barcode.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.pdf.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.tablesheet.16.0.5.min.js"></script> <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/interop/gc.spread.excelio.16.0.5.min.js"></script> <script src="_content/SJS_Blazor_Lib/exampleJsInterop.js" type="text/javascript"></script> </head> <body> <app>Loading...</app> <div id="blazor-error-ui"> An unhandled error has occurred. <a href="" class="reload">Reload</a> <a class="dismiss">??</a> </div> <script src="_framework/blazor.webassembly.js"></script> </body> </html>
我们还可以在“Pages”文件夹下编辑 Index.razor 中的代码:
(Index.razor) @page "/" @using SJS_Blazor_Lib <h1>Hello, SpreadJS!</h1> <table> <tr> <td> <label>Sheet Index</label> <input @bind-value="@SheetIndex" /> </td> <td> <label>Row Index</label> <input @bind-value="@Row" /> </td> <td> <label>Column Index</label> <input @bind-value="@Column" /> </td> <td> <lable>Value</lable> <input @bind-value="@Value" /> </td> </tr> <tr> <td> <button @onclick="doSomething">Update Text</button> </td> </tr> <tr> <td> <input type="file" @ref="inputFileEle" /> </td> <td> <button @onclick="ImportExcel">Import File</button> </td> </tr> </table> <br /> <SpreadJS SheetCount="3" HostStyle="@HostStyle" @ref="ss" /> @code { private SpreadJS ss; private ElementReference inputFileEle; public int SheetIndex { get; set; } = 0; public int Row { get; set; } = 0; public int Column { get; set; } = 0; public string Value { get; set; } = ""; private string HostStyle { get; set; } = "width:90wh;height:70vh;border: 1px solid darkgray"; private void doSomething() { ss.setValue(SheetIndex, Row, Column, Value); } private void ImportExcel() { ss.OpenExcel(inputFileEle); } }
这就是在 Blazor 应用程序中运行 SpreadJS 所需的全部内容:
前面的代码只是 SpreadJS 在 Blazor 应用程序中的基本用法,但我们可以通过包含一些 Excel 导入功能来添加它。借助 SpreadJS 的强大功能,您可以在 Blazor 应用程序中导入自己的 Excel 文件。实现类似于基本的 SpreadJS Blazor 代码,但我们需要编辑 Index.razor 文件以添加一些用于设置值和打开 Excel 文件的代码:
@page "/" @using SpreadJS_Blazor_Lib <h1>Hello, SpreadJS!</h1> <table> <tr> <td> <label>Sheet Index</label> <input @bind-value="@SheetIndex" /> </td> <td> <label>Row Index</label> <input @bind-value="@Row" /> </td> <td> <label>Column Index</label> <input @bind-value="@Column" /> </td> <td> <lable>Value</lable> <input @bind-value="@Value" /> </td> </tr> <tr> <td> <button @onclick="doSomething">Update Text</button> </td> </tr> <tr> <td> <input type="file" @ref="inputFileEle" @onchange="ImportExcel" /> </td> </tr> </table> <br /> <SpreadJS SheetCount="3" HostStyle="@HostStyle" @ref="ss" /> @code { private SpreadJS ss; private ElementReference inputFileEle; public int SheetIndex { get; set; } = 0; public int Row { get; set; } = 0; public int Column { get; set; } = 0; public string Value { get; set; } = ""; private string HostStyle { get; set; } = "width:90wh;height:70vh;border: 1px solid darkgray"; private void doSomething() { ss.setValue(SheetIndex, Row, Column, Value); } private void ImportExcel() { ss.OpenExcel(inputFileEle); } }
一旦我们在 Index.razor 中有了该代码,它应该可以导入,因为我们已经在前面的步骤中为 SpreadJS_Blazor_Lib 项目中的 SpreadJS.razor 和 exampleJsInterop.js 文件添加了代码。
此外,我们还可以添加导出Excel文件的功能。为此,我们需要将代码添加到 exampleJsInterop.js 文件中:
window.sjsAdaptor = { (....) saveExcel: function (host) { var spread = GC.Spread.Sheets.findControl(host); if (spread) { var json = spread.toJSON(); var excelIO = new GC.Spread.Excel.IO(); excelIO.save(json, function (blob) { saveAs(blob, "export.xlsx"); }, function (e) { console.log(e); }); } } };
为了使“另存为”功能起作用,我们还需要在 index.html 文件中添加对 FileSaver 库的引用:
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js"></script>
要让此代码在页面上运行,我们需要将用于导出的按钮添加到 Index.razor 代码中:
@page "/" @using SpreadJS_Blazor_Lib <h1>Hello, SpreadJS!</h1> <table> (....) <td> <button @onclick="ExportExcel">Export File</button> </td> </tr> </table> <br /> <SpreadJS SheetCount="3" HostStyle="@HostStyle" @ref="ss" /> @code { (....) private void ExportExcel() { ss.SaveExcel(); } }
“ss.SaveExcel()”调用使用 SpreadJS.razor 文件中的代码,因此我们需要确保在其中添加指向 exampleJsInterop.js 文件中正确函数的代码:
@using Microsoft.JSInterop @inject IJSRuntime JSRuntime <div @ref="host"></div> @code { (....) public void SaveExcel() { JSRuntime.InvokeVoidAsync("sjsAdaptor.saveExcel", host); } (....) }
此文章展示了如何在 Blazor 应用程序中实现 SpreadJS 利用 .NET 的强大功能完成浏览器端的 Excel 导入导出。
本文是由葡萄城技术开发团队发布,转载请注明出处:葡萄城官网
简单介绍前段时间一个工作的思想:OptimizationforArbitrary-OrientedObjectDetectionviaRepresentationInvarianceLoss。讨论的是旋转目标表征的问题,发表在IEEEGeoscienceandRemoteSensingLetters上。 论文地址:https://ieeexplore.ieee.org/document/9555916arxiv扩展版:https://arxiv.org/abs/2012.04150代码:https://github.com/ming71/RIDet﹀﹀﹀1.Motivation主流的旋转目标表征方式分为两种:旋转矩形(OBB)和四边形(QBB)。这两种表征方式都存在边界越界问题和周期性问题(参考CSL论文或者下面的示意图)。表征模糊性的图例以QBB表征为例,对于一个凸的四边形而言(大多能用四边形表示的目标都是凸的),4个顶点有P_4^4=24种组合方式,他们能表示唯一的凸四边形,这24种表示方式是等价的局部最优解。但是实际回归时,smoothL_1损失只能指定一种情况学习,损失向唯一的
一、单表索引优化建表:建一张表,SQL如下:createtable`tb_article`( `id`intnotnullprimarykeyauto_incrementcomment'主键', `author_id`intnotnullcomment'作者id', `category_id`intnotnullcomment'文章类别id', `views`intnotnullcomment'阅读量', `comments`intnotnullcomment'评论量', `title`varchar(200)notnullcomment'文章标题', `content`textnotnullcomment'文章内容' )comment'文章表'; insertintotb_article(author_id,category_id,views,comments,title,content)values(1,1,1,1,1,1)
昨天为大家介绍了ES系列06:ik分词+Fulltextqueries之matchquery。今天TeHero为大家分享Fulltextqueries的match_phrasequery和match_phrase_prefixquery,同时从倒排序索引原理入手,将DSL语句转化为sql语句,方便大家理解学习。本文结构【开局一张图】ps:上图的xmind文件,公众号后台回复【es06】即可免费获取!一、在开始之前,完成数据准备:#创建映射 PUT/tehero_index { "settings":{ "index":{ "number_of_shards":1, "number_of_replicas":1 } }, "mappings":{ "_doc":{ "dynamic":false, "properties":{ "id":{ "type":"integer"
<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; } .father{ width:200px; height:200px; background:red; } .son{ width:100px; height:100px; background:blue; } </style> <scripttype="text/javascript"src="jquery-1.10.1.min.js"></script> </head> <body> <script> $(function() { //“冒泡事件:微软提出的事件由子元素传递到父元素的过程,叫做冒
在kotlin中可以不用使用findViewById来初始化控件,但是在给EditText赋值时使用editText.text=“value”时会提示Typemismatch,这是因为EditText在推断types时出现问题。为了避免types不匹配,使用Editable类的Factory内部类,来解决这个问题。etStartTime.text=Editable.Factory.getInstance().newEditable(“test”) 补充知识:kotlinTextView、EditText的相关监听的常用使用kotlinTextView、EditText的相关点击监听、长按监听、输入变化监听等的常用使用会与以前的AndroidJava写法有一点点的区别。//TextView点击监听两种方式 //① TextView.setOnClickListener{//这里写实现的功能} //② TextView.setOnClickListener(object:OnClickListener{ overridefunonClick(v:View?){//这里写实现的功能} }
“LogisticRegression——Advancedoptimization”。01—笔记本节讲的高级优化是相对于上一节的梯度下降法来说的,相对于上一节的梯度下降法本节的优化算法速度更快,更适合解决大型的机器学习问题。是什么样的高级算法呢?除了梯度下降法还有?回忆一下上一小节梯度下降法的思路。首先,梯度下降法是通过梯度方向指明参数\theta变化的方向;其次,迭代变换,知道找到那个能使代价函数J(\theta)最小那组\theta.如下图:上图中,使用梯度下降法的时候每一步我们都需要编码做两件事(1)求偏导数;(2)求代价函数的值。为了实现上面的两个小目标,除了梯度下降法,还有几种更加高级、复杂的算法可选。如下图:共轭梯度、BFGS、L-BFGS就是其中三个比较常用的。这三种算法的优点:不需要手动设置学习率\alpha;收敛速度比较快。这三种算法,比较复杂,需要花好多天的时间才能弄明白,这里吴老师没有详细介绍。可以在数值分析类的课程中学习到。吴老师自己讲,这三种算法他已经在10多年前就用过了,但真正搞明白也就是这两年的事。就是说,我们可以在一知半解的情况下使用一些机器学习算法很好
Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的,在很多版本的CentOS中使不支持更新最新的一些补丁包的。由于学习的环境使用的是CentOS,因此这里是我们将Docker安装到CentOS上,注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。安装步骤:1、Docker要求CentOS系统的内核版本高于3.10,查看本页面的前提条件来验证你的CentOS版本是否支持Docker。通过 uname-r 命令查看你当前的内核版本$uname-r复制2、使用 root 权限登录Centos。确保yum包更新到最新。$sudoyumupdate复制3、卸载旧版本(如果安装过旧版本的话)$sudoyumremovedockerdocker-commondocker-selinuxdocker-engine复制4、安装需要的软件包, yum-util提供yum-config-manager功能,另外两个是d
来源:http://www.51testing.com/ 前言 在最近几个项目中,小编接触了较多关于H5页面的测试,H5页面的测试除了业务逻辑功能测试外,其他部分的测试方法基本是可以通用的,在此对H5页面的一些通用测试方法进行总结分享给大家。H5页面介绍 1.H5页面 H5即HTML5,是最新的Web端开发语言版本,大多数手机APP页面会用H5实现,包括PCWeb站点也会用它开发实现。所以Web的通用测试点和方法基本都可以适用于它。H5其实就是:移动端Web页面。 H5应用在很多地方,如APP的活动专题页面、新闻页面、微信公众号文章页面等都属于H5页面,在PC或者手机浏览器都可以直接访问H5页面。 H5作为移动端的web页面,有它自身的优势,如它可以跨平台使用,开发成本相对较低;可随时上线就更新版本,适合快速迭代;可以轻量的触达用户,提供更便捷的服务。因此在项目中,对于上线后迭代更新较快的页面,通常利用H5页面来实现。 2.技术实现 从广义上来讲,HTML5是包括HTML、CSS和JavaScript在内的一套技术组合。 HTML:网页的具体内容和结构; CSS:网页
安智客长期关注可信执行环境TEE,今天了解学习一些可信软件基TSB(TrustedSoftwareBase)。要了解可信软件基,先来了解可信计算基TCB(TrustedComputingBase)这一个传统概念。由于可信计算规范内容较多既包括计算节点也包括服务器可信支撑平台。本文参考大量规范标准只对可信软件基做一个浅述。可信计算基(TCB)是“计算机系统内保护装置的总体,包括硬件、固件、软件和负责执行安全策略的组合体。它建立了一个基本的保护环境,并提供一个可信计算系统所要求的附加用户服务”。通常所指的可信计算基是构成安全计算机信息系统的所有安全保护装置的组合体(通常称为安全子系统),以防止不可信主体的干扰和篡改。可信软件基(TSB)可信软件基在可信计算体系中处于承上启下的核心地位,对上保护宿主基础软件和应用的安全,对下管理TPCM并承接TPCM信任链的传递,是TPCM操作系统的延伸。可信软件基通过构建双系统体系结构,并行于宿主基础软件,在TPCM的支撑下通过在宿主操作系统内部进行主动拦截和度量保护,实现主动免疫防御的安全能力。读完上述一段话,要理解解可信软件基是不是有点绕,首先看看什么
上篇讲解了如何用Redis实现分布式锁的五种方案,但我们还是有更优的王者方案,就是用Redisson。 缓存系列文章: 缓存实战(一):20图|6千字|缓存实战(上篇) 缓存实战(二):Redis分布式锁|从青铜到钻石的五种演进方案 我们先来看下Redis官网怎么说, 而Java版的分布式锁的框架就是Redisson。本篇实战内容将会基于我的开源项目PassJava来整合Redisson。 我把后端、前端、小程序都上传到同一个仓库里面了,大家可以通过Github或码云访问。地址如下: Github:https://github.com/Jackson0714/PassJava-Platform 码云:https://gitee.com/jayh2018/PassJava-Platform 配套教程:www.passjava.cn 在实战之前,我们先来看下使用Redisson的原理。 一、Redisson是什么? 如果你之前是在用Redis的话,那使用Redisson的话将会事半功倍,Redisson提供了使用Redis的最简单和最便捷的方法。 Redisson的宗旨是促进使用者
假设你是高中毕业的,ok,数学知识几何知识中,我们学过 x,y,z 3个轴然后就可以画出形状了。 1.新建空白窗体,grid换成canvas,然后新增一个Viewport3D元素 3d中显示的元素是无数个三角形组成的,比如正方体也是三角形组成的。我们来看下 MeshGeometry3D Positions和TriangleIndices当然还有其他属性。Positions定义一系列3维坐标(x,y,z),TriangleIndices描述了怎么个点顺序,这两个好比StringFormat,Positions对应值,TriangleIndices对应位置 例如<MeshGeometry3DPositions="-1,0,00,1,01,0,0"TriangleIndices="0,2,1"/>表示从点(-1,0,0)到(1,0,0)再到(0,1,0),好,你看懂了,还有个细节,三角形的出点顺序必须是逆时针的。 所以3维的空间中,调整z轴,就可以从远到近,从近到远。 Material材质,不同的材质,就会不同的 光源&n
1、数据流 数据流:数据流由一组固定成分的数据组成,表示数据的流向; 数据流命名:每个数据流都有一个命名,该命名表达了该数据流传输的数据的含义;如在箭头上标注“账号信息”,表示该数据流是传输账号信息的,表示数据的内容; 数据字典:数据流箭头上只标明了“账号信息”,没有具体的格式内容,是只有账号,还是有账号/密码/验证码等信息,这些数据详细格式,都在数据字典中定义; 符号表示:数据流使用箭头表示,箭头所指的方向,代表了数据流向; 2、加工(核心) 加工:描述“输入数据流”到“输出数据流”之间的变换,即对数据进行了什么样的处理,使得“输入数据流”变为“输出数据流”; 主要操作:在程序中的体现是处理数据的过程,向“加工”中输入数据流后,将数据进行加工,处理,变换后,产生新的“输出数据流”; 符号表示:使用圆形/圆角矩形表示加工; 3、数据存储 数据存储(文件):表示暂时存储的数据,数据存储的粒度是以表为单位; 文件名称:每个数据存储(文件)都有名字; 方向:流向文件的数据流表示向文件内写入内容,从文件流出的数据流表示从文件读取内容; 符号表示:使用双横线/半框形矩形表示 4、外部实体 外部实
wcscpy()即为strcpy()的宽字符版本(Unicode),与_T类似的,VisualC++提供了类似的同名函数: #ifdefUNICODE #define_tcscpywcscpy #else #define_tcscpystrcpy #endif复制 wcscpy_s的作用和前面一样,不过是MS搞出来的带有安全机制的,更安全的版本。。。为什么有时候在调用wcscpy的时候会出现不安全现象呢?是因为有可能由于程序员的不正确使用,导致缓冲区的泄露,或者造成内存数据读取错误等现象,所以推荐使用unicode版的_s的函数版本wcscpy_s(*dest,wcslen(src),*src);这样读取的数据就能保证数据的正确性 wcscpy_s的函数原型为: error_twcscpy_s(wchar_t*strDestination,size_tnumberOfCharacters,constwchar_t*strSource);复制 其中strDestination为指向将要复制字符串的目的缓冲区的地址,numberOfCharacters为缓冲区大小(以字符计),st
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop
Linux学习路线by鱼皮。 原创不易,请勿抄袭,违者必究! 大家好,我是鱼皮,又花1周肝出了Linux学习资料全家桶,包括学习路线、命令手册、视频、书籍、文档、实战教程、社区、工具、大厂面试题等,完整分享给大家! 在阅读本文章之前,建议先观看视频,是一个比较特殊的入门教程。我通过实际上线一个项目的方式,带大家快速学习企业中常用的Linux命令,几分钟应该就对Linux有个不错的了解啦~ 视频地址:https://www.bilibili.com/video/BV1ev411G7VE/ 为什么学Linux? 相比于Windows,Linux免费、开源、安全、灵活、稳定、便于开发,所以更受企业青睐,甚至90%以上的企业应用都是用Linux服务器部署的。 无论是前端、后端、算法、测试、运维等计算机相关岗位的同学,都建议学习下Linux,大有裨益。 学习境界 首先,Linux入门很简单,但想学的透彻难上加难! 因此,在学习之前要明确目标。 可以Linux的学习分为几种境界: 明劲,就是了解Linux的基本概念,会敲常用命令来应对工作。对于大多数想从事开发和运维岗位的同学,学到这就足够找
<ulclass="tabs"> <liclass="current">基本信息</li> <li>教育信息</li> <li>实习经历</li> <li>获奖信息</li> </ul>复制 <divclass="panelpanel-1"></div> <divclass="panelpanel-2"></div> <divclass="panelpanel-3"></div> <divclass="panelpanel-4"></div>复制 $('.tabsli').on('click',function(){ varindex=$(this).index(); alert('nowclickon'+index+'li'); }); //这个从0开始计数复制 $('.panel').each(function(){ alert('nowrun
T1 考场上一看到暴力有70分就没有去想正解。当时脑子里闪过了先处理两个相加,再询问。但是当时感觉可能会算重复,就没有继续往下想。 但是应该是没有重复的。因为顺序不同也算不同方案。。 因为100000内的质数只有9000多个,所以可以定义dp[i]为i能被两个质数相加得到的方案数。然后\(n^2\)求出。 对于每个n,只需O(n)求出答案即可。 代码: #include<bits/stdc++.h> usingnamespacestd; typedeflonglongll; constintmaxn=100000+10; intread(){ intw=0,x=1; charch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')x=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ w=(w<<1)+(w<<3)+(ch^48); ch=getchar(); } returnx*w; } intn
jQuery代码 <scripttype="text/javascript"> vardate={"images/003.png":["images/003.png","人物1","185"], "images/004.png":["images/004.png","人物2","165"], "images/005.png":["images/005.png","人物3","170"] }; $(function(){ $.each(date,function(key,value){ varsmallimg=$("<imgsrc='"+key+"'/>"); smallimg.attr("bigmappath",value[0]);//初始化小图的时候为小图设置这三个属性值 smallimg.attr("personname",value[1]); smallimg.attr("personheight",value[2]); smallimg.mouseover(function(e){