这几夜心里颇不平静, 奈何 JS水平有限,前台效果耗时四天,后台传值一天,直至昨夜丑时测试初步完成,其实就是一个给tree来授权,网上开源的插件很多,如treeview、treejs、easyui 等等,只是这里授权稍有不同,在新增角色的时候,可以同时对所有功能进行授权, 如下图,只能放在Table中去实现。一行一行的写js,最后写的差不多有个200多行。
项目原界面不方便截图,这里随手写个原生态的 Demo ,当然比较丑
如图所示,首先这是一个Table,无论枝节点还是叶节点都作为一行(tr),功能菜单列表中叶节点(无分支) 后对应新增、修改等六个功能(复选框)
先来说说前台需要实现的效果:
①点击枝节点,其下所有的节点(枝/叶)收缩/展开
②点击枝节点前的复选框,其下所有节点(枝/叶)、叶节点所在行的新增、修改等复选框勾选/取消
eg: 点击蓝圈中的复选框,则红框内所有的复选框都被勾选/取消
针对JQ,只要能给每个标签一个值,name、id之类的用以区别,就能使用Jquery选择器来确定该元素
给所有枝节点嵌套一个 id 为 spid 的标签用来标识
< tr id ="11000" >
< td colspan ="7" >< input name ="c0" id ="1-0000c" type ="checkbox" />< span id ="spid" > 1-0000span > td >
tr >
< tr id ="11-000" style ="text-indent: 10px" >
< td >< input name ="c1" id ="11-000c" type ="checkbox" />< span > 11-000span > td >
< td >< input name ="A" id ="11-000cA" type ="checkbox" /> td >
< td >< input name ="B" id ="11-000cB" type ="checkbox" /> td >
< td >< input name ="C" id ="11-000cC" type ="checkbox" /> td >
< td >< input name ="D" id ="11-000cD" type ="checkbox" /> td >
< td >< input name ="E" id ="11-000cE" type ="checkbox" /> td >
< td >< input name ="F" id ="11-000cF" type ="checkbox" /> td >
tr >
说白了,就是用Table的方式来实现一个Tree的效果,这里子节点和叶节点是用
的缩进长度来达到层级节点的效果
针对收缩/展开
只要能够选择到枝节点里面的span标签,既可用toggle()来隐藏/展开子节点。根据命名的特点使用拼接id的方法来选择子节点,即可实现.
然后分情况,依次判断是鼠标点击的是几级枝节点,如果是一级,则只需要隐藏/展开其下的叶节点;如果是两级,要隐藏/展开其下的枝节点、叶节点;以此类推
比如当点击篮框所在的枝节点23-000时,叶节点231-00、23200、枝节点23300及叶节点2331-0、2332-0 均要隐藏/展开。
var lenth = $(this ).parent().parent().attr('id').indexOf("-");
var s = $(this ).parent().parent().attr('id').substring(0, lenth);
判断前,先得到当前对象所在的 tr 的 id 中的字符 - 的位置,根据该位置可知当前鼠标点击的是何级枝节点,然后隐藏/展开其下节点即可,此时对应的 lenth == 2 ,则有
$(this ).parent().parent().siblings("#" + s + i + '-' + '00').toggle();
for (var q = 1; q < 6; q++) {
if ($("#" + s + i + q + '-' + '0').is(":hidden")){
$( this ).parent().parent().siblings("#" + s + i + q + '-' + '0').toggle();
}
$( this ).parent().parent().siblings("#" + s + i + q + '-' + '0').toggle();
}
若lenth == 3 ,即为最里层枝节点,则有
$(this ).parent().parent().siblings("#" + s + i + '-' + '0').toggle();
若lenth ==1 ,即为最外面的枝节点(根节点),同样是按照id的拼接方法来判断,不同的是,需要多循环一层而已
$(this ).parent().parent().siblings("#" + s + i + '-' + '000').toggle();
for (var j = 1; j < 6; j++) {
if ($("#" + s + i + j + '-' + '00').is(":hidden")) {
$( this ).parent().parent().siblings("#" + s + i + j + '-' + '00').toggle();
}
$( this ).parent().parent().siblings("#" + s + i + j + '-' + '00').toggle();
for (var p = 1; p < 6; p++) {
if ($("#" + s + i + j + p + '-' + '0').is(":hidden")) {
$( this ).parent().parent().siblings("#" + s + i + j + p + '-' + '0').toggle();
}
$( this ).parent().parent().siblings("#" + s + i + j + p + '-' + '0').toggle();
}
}
根据观察比较,发现就是一层一层的去选择节点,节点越靠外,最外是根节点,那么需要遍历的层次就越多,同理,越内侧,遍历次数就越少。用到了大量的 if else 语句,其中又和 for 语句相互嵌套,层层相扣,写完之后,我的感觉是,除了自己,估计很难有另外一个人能在短时间内明白,自己再也不要去维护自己写的这个菜单授权。仔细思索,其实是可以进行大量优化代码,比如:点击第三层需要循环第二层和第一层,点击第二层需要循环第一层,点击第一层需要循环其下的叶节点,那么我最后的解决方案时采用 直接放在一个方法里面,然后用$.each() 来遍历,把叶节点放在最下面,一层一层,这样一来,代码果然看的很舒服,质量也提高不少。
而对于单选/多选/全选/反选
相对来说判断的情况复杂一些,主要是需要结合后台逻辑,比如说:
三级叶节点勾选,则三级枝节点勾选、二级枝节点勾选、一级枝节点勾选
二级枝节点勾选,则其下所有子节点勾选,其上一级枝节点勾选
首先还是分情况讨论,思路如下
if 勾选授权行(叶节点)所在的第一列(11-000、12-000)
其所在行的每一个节点均勾选(新增、修改、删除等)
其上 各级直系枝节点勾选
else
if 勾选授权行所在的其他列(新增、修改、删除、修改、上传、下载)
当个数不少于1一个时,其第一列也要勾选(涉及到后台的传值), 其上 各级直系枝节点勾选
当个数为0时(点击两下),其第一列不勾选,其上父级节点的兄弟节点(大爹、二爹、小爹)若均无勾选,则祖父节点不勾选,
所有其一勾选,则祖父节点仍勾选,依次类推,直至根节点
else 勾选枝节点时
if 一级节点 逐级遍历,其下所有子节点勾选,其上若兄弟节点均无勾选,则父节点不勾选,若有其一勾选,则父节点勾选
if 二级节点 逐级遍历,其下所有子节点勾选,其上若兄弟节点均无勾选,则父节点不勾选,若有其一勾选,则父节点勾选,以此类推,直至祖父节点
if 三级节点 逐级遍历,其下所有子节点勾选,其上若兄弟节点均无勾选,则父节点不勾选,若有其一勾选,则父节点勾选,以此类推,直至曾祖父节点
如此,就把所有的情况都考虑进去,按部就班,一行一行的码js,即可达到要求,代码有点多,思路就是这样,这里就不贴详细代码
上面都是前台的效果,下面来说说后台传值,这里有些技巧,值得一说,我给每个授权对应的td 都赋有name 值,这里其值对应的是角色表中某功能数据中一个列,比如,选择11-000,新增、删除;则表中会授权列会记录 A、B 。写到这里,无非就是一些传值,直接记录用Ajax传递后台接受即可,用Push方法,具体的在 MVC与Ajax应用 中删除一节有详细记录。这里也不再赘述。写到这里,文中唯一值得说两句的便是下文。当对某个角色的权限进行修改时,初次加载该界面,Table 表中的复选框 会对照 该角色本身的功能及权限,会有勾选。说白了就是点击修改的时候,会有传值的动作,先去数据库中 根据该角色的主键信息,捞取其拥有的功能和对应的权限,根据这些数据Table表中的Checkbox 会有一个初始值。
这里用到了Each,不得不说真方便。
先在后台拿到 两列(功能列表、权限)的集合,然后传到前台View中(Authlist)
紧接着根据 @Html.Raw(Json.Encode(Authlist)) 将其转换为Json 数组
再对其遍历,最后根据其值给授权复选框一个初始值,具体如下:
function getcheck() {
$( "input[type=checkbox]").prop("checked", false );
var data=@Html.Raw(Json.Encode(Authlist));
$.each(data, function (i, item) {
var array = item.WebFunctItem.toString().split(',');
var local = item.FunctID.toString().indexOf("0");
var sfunctid = item.FunctID.toString().substring(0, local);
var lastnumber = item.FunctID.toString().substr(item.FunctID.length-1, 1);
if (lastnumber === "0") {
$( "#" + sfunctid + '-' + Getzero(local) + 'u').prop("checked", true );
for (var i = 0; i < array.length; i++) {
$( "#" + sfunctid + '-' +Getzero(local) + 'u'+array[i]).prop("checked", true );
}
}
else {
$( "#" + item.FunctID.toString() + '-' + 'u').prop("checked", true );
for (var i = 0; i < array.length; i++) {
$( "#" + item.FunctID.toString() + "-u" + array[i]).prop("checked", true );
}
}
});
}
写到这里,自然并没有结束,对于前台来说,效果仅仅实现了三分之一,其实最麻烦的是 ,挨个节点去做判断,这里是Table标签,只能挨个去遍历,新增的话还好说,当对角色权限做修改操作时,因较难判断出复选框状态的改变/不改变。比如,未做修改,或者仅对已存在的功能菜单作部分权限(增、删、改、查等)调整时,这时Ajax 传值,后台Update语句有效;如果勾选新的功能菜单,这是ajax传值,后台的Update语句无法完成,只能对新增的功能菜单执行Insert 方有效,此时,前台就需要判断哪些是对原有菜单的功能进行修改,哪些是新增的菜单及菜单下被授权的功能,如此,是很难做出判断,对此,后台逻辑控制为: 先删除该角色所有的功能,然后逐个新增 ,删除 和 新增的 sql 进行叠加,然后调用一个事物,以免中途语句执行失败可回滚至原始值。
最近都在忙于前台样式,这个项目进行到此处,着实让自己的JS水平 提高了一把,业务水平的最好的提高果真就是实践,然后不断的测试、测试、测试
市人皆大笑,举手揶揄之
转载于:https://www.cnblogs.com/Sientuo/p/7010250.html
你可能感兴趣的:(MVC 纯Table实现树节点效果+授权)
python 读excel每行替换_Python脚本操作Excel实现批量替换功能
weixin_39646695
python 读excel每行替换
Python脚本操作Excel实现批量替换功能大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换。使用的工具Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~明确需求原始excel如下我们的目标是把下面excel工作表的sheet1表页A列的内容“替换我吧”批量替换为B列的“我用来替换的
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
9、汇编语言编程入门:从环境搭建到简单程序实现
神经网络酱
汇编语言 MEPIS GNU工具链
汇编语言编程入门:从环境搭建到简单程序实现1.数据存储介质问题解决在处理数据存储时,若要使用MEPIS系统,需确保有其可访问的存储介质。目前,MEPIS无法向采用NTFS格式(常用于Windows2000和XP工作站)的硬盘写入数据。不过,若硬盘采用FAT32格式,MEPIS就能进行写入操作。此外,MEPIS还能将文件写入软盘和大多数USB闪存驱动器。若工作站连接到局域网,还可通过FTP协议或挂载
day15|前端框架学习和算法
universe_01
前端 算法 笔记
T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的
IK分词
初心myp
实现简单的分词功能,智能化分词添加依赖配置:4.10.4org.apache.lucenelucene-core${lucene.version}org.apache.lucenelucene-analyzers-common${lucene.version}org.apache.lucenelucene-queryparser${lucene.version}org.apache.lucenel
SpringMVC执行流程(原理),通俗易懂
国服冰
SpringMVC spring mvc
SpringMVC执行流程(原理),通俗易懂一、图解SpringMVC流程二、进一步理解Springmvc的执行流程1、导入依赖2、建立展示的视图3、web.xml4、spring配置文件springmvc-servlet5、Controller6、tomcat配置7、访问的url8、视图页面一、图解SpringMVC流程图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提
深入解析JVM工作原理:从字节码到机器指令的全过程
一、JVM概述Java虚拟机(JVM)是Java平台的核心组件,它实现了Java"一次编写,到处运行"的理念。JVM是一个抽象的计算机器,它有自己的指令集和运行时内存管理机制。JVM的主要职责:加载:读取.class文件并验证其正确性存储:管理内存分配和垃圾回收执行:解释或编译字节码为机器指令安全:提供沙箱环境限制恶意代码二、JVM架构详解JVM由三个主要子系统组成:1.类加载子系统类加载过程分为
Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程
倾听铃的声
后端 spring java mvc 开发语言 分布式
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第二篇:DispatcherServlet处理请求的过程的源码解析。@pdaiSpring进阶-SpringMVC实现原理之DispatcherServlet处理请求的
读书能沁润心灵
平等乡马回营小学方燕姣
书,是一泓清澈的溪水,是一片充满生机的芳草地。读书能让孩子的心变得宁静、诗意、豁达。在美好年纪,美好的时光里,我们要创造一切可以创造的机会,让孩子去遨游浩瀚的书海,浸润美好的人生。每个早晨,一股花草的清香扑了个满怀,清脆的读书声响彻了整个校园,回荡在空中久久不能停息。自然界的清韵声音有:鸟鸣声、溪流声、松风声、雨打芭蕉声,而惟读书声最为动听。孩子们的读书声,混和着树上的鸟鸣声,还有微风吹动竹叶的声
JVM 内存模型深度解析:原子性、可见性与有序性的实现
练习时长两年半的程序员小胡
JVM 深度剖析:从面试考点到生产实践 jvm java 内存模型
在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J
Flowable 高级扩展:自定义元素与性能优化实战
练习时长两年半的程序员小胡
Flowable 流程引擎实战指南 流程图 flowable BPMN 流程引擎 java
在前五篇文章中,我们从基础概念、流程设计、API实战、SpringBoot集成,到外部系统协同,逐步构建了Flowable的应用体系。但企业级复杂场景中,原生功能往往难以满足定制化需求——比如需要特殊的审批规则网关、与决策引擎联动实现动态路由,或是在高并发场景下优化流程引擎性能。本文将聚焦Flowable的高级扩展能力,详解如何自定义流程元素、集成规则引擎,并掌握大型系统中的性能调优策略。一、自定
Java | 多线程经典问题 - 售票
Ada54
一、售票需求1)同一个票池2)多个窗口卖票,不能出售同一张票二、售票问题代码实现(线程与进程小总结,请戳:Java|线程和进程,创建线程)step1:定义SaleWindow类实现Runnable接口,覆盖run方法step2:实例化SaleWindow对象,创建Thread对象,将SaleWindow作为参数传给Thread类的构造函数,然后通过Thread.start()方法启动线程step3
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
企业级区块链平台Hyperchain核心原理剖析
boyedu
区块链 区块链 企业级区块链平台 Hyperchain
Hyperchain作为国产自主可控的企业级联盟区块链平台,其核心原理围绕高性能共识、隐私保护、智能合约引擎及可扩展架构展开,通过多模块协同实现企业级区块链网络的高效部署与安全运行。以下从核心架构、关键技术、性能优化、安全机制、应用场景五个维度展开剖析:一、核心架构:分层解耦与模块化设计Hyperchain采用分层架构,将区块链功能解耦为独立模块,支持灵活组合与扩展:P2P网络层由验证节点(VP)
在线人数统计业务设计(场景八股文)
业务问题在当经的网站中,在线人数的实时统计已经是一个必不可少的模块了,并且该统计功能最好能够按不同的时间间隔做的统计,现在需要你设计一个在线人数统计的模块,你应该怎么进行设计的呢?背景一个网校下会有多个学员。目前平台大概有十个,平台对应的网校大概五十几个,平均一个网校会有5w个用户,预计总人数为200w,最该学员的在线人数在10w左右。设计思路最开始的时候,想到的就是使用mysql直接实现,但是明
JAVA接口机结构解析
秃狼
SpringBoot 八股文 Java java 学习
什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消
Aop +反射 实现方法版本动态切换
需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)
通义万相2.2:开启高清视频生成新纪元
Liudef06小白
特殊专栏 AIGC 人工智能 人工智能 通义万相2.2 图生视频
通义万相2.2:开启高清视频生成新纪元2025年7月28日,中国AI领域迎来里程碑时刻——通义万相团队正式开源其革命性视频生成模型Wan2.2的核心权重,这标志着开源社区首次获得支持720P高清视频生成的先进模型架构。一、架构革新:混合专家系统1.1MoE视频扩散架构通义万相2.2首次将混合专家(MoE)架构引入视频扩散模型,通过双专家系统实现计算效率与模型容量的平衡:classMoEVideoD
氧惠官方邀请码333777,氧惠邀请码怎么获得?氧惠邀请码有什么套路?
知行导师
问:氧惠邀请码怎么获得?答:氧惠官方邀请码333777返点高佣金高真的高。问:氧惠邀请码有什么套路?答:氧惠官方邀请码333777返点高佣金高真的高。氧惠APP汇聚各大主流电商和生活服务平台优惠,展示全网全品类商品,满足网购爱好者对品质好货与极致性价比的追求,并同时享受大平台购物权益保障。满足用户日常吃喝玩乐衣食住行的聚合APP,独特的商业模式,响应国家号召,为实现全民共富而努力奋斗。氧惠邀请码3
最新阿里四面面试真题46道:面试技巧+核心问题+面试心得
风平浪静如码
前言做技术的有一种资历,叫做通过了阿里的面试。这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。希望对大家帮助,祝面试成功,有个更好的职业规划。一,阿里常见技术面1、微信红包怎么实现。2、海量数据分析。3、测试职位问的线程安全和非线程安全。4、HTTP2.0、thrift。5、面试电话沟通可能先让自我介绍。6、分布式事务一致性。7、ni
LVS+Keepalived实现高可用和负载均衡
2401_84412895
程序员 lvs 负载均衡 运维
2、开启网卡子接口配置VIP[root@a~]#cd/etc/sysconfig/network-scripts/[root@anetwork-scripts]#cp-aifcfg-ens32ifcfg-ens32:0[root@anetwork-scripts]#catifcfg-ens32:0BOOTPROTO=staticDEVICE=ens32:0ONBOOT=yesIPADDR=10.1
不能随便扔垃圾
小猪宝贝0905
阴雨天的周五,看你生病在家窝了快一周,嚷嚷着要去游乐场,那就决定带你去四海书城;为了不让你被雨淋湿,妈妈准备推个自行车,刚把你放到自行车后座上,你一个喷嚏鼻涕出来了,随手拿出纸巾擦擦鼻涕,妈妈因为嫌把你从座位上抱下来扔纸巾到前面的垃圾桶麻烦,就将纸巾扔进了旁边的树丛里;你却批评了妈妈,“不可以把纸巾扔到地上,应该扔进垃圾桶”;妈妈顿时感觉很羞愧,将你抱下来,重新捡起纸巾,扔进了垃圾桶。
深入理解汇编语言子程序设计与系统调用
网安spinage
汇编语言 开发语言 汇编 算法
本文将全面解析汇编语言中子程序设计的核心技术以及系统调用的实现方法,涵盖参数传递的多种方式、堆栈管理、API调用等关键知识点,并提供实际案例演示。一、子程序设计:参数传递的艺术1.寄存器传参:高效简洁.386.modelflat,stdcalloptioncasemap:none.dataxdd5;定义变量ydd6sumdd?.code;函数定义:addxy1addxy1procpushebpmo
大胆的宣传自己
工匠良辰
#大胆的宣传自己原创:辉哥奇谭辉哥奇谭今天有朋友问:辉哥,发现你最近很多次宣传「知识星球」…我回答:对我自己用心做的东西有信心。我的观点是:我们每个人要把自己当成一件产品,精心的打磨,大胆的推销。如果我们一辈子都不敢面对自己这件产品,也不好意思去推销,怎样才能实现自己内心的梦想?怎样才能获得自由?怎样才能过上自己想过的生活?人生在世也许就是七八十年光景,我们最终都会败在「时光」脚下。每个人来到这世
漫游漫川关
高曾骏骏
傍晚时分,夕阳从树的缝隙穿过来撒在我们老老小小一家人身上暖暖的,一抬头映入眼帘的是“朝秦暮楚”四个字挂在山壁上,我知道漫川关到了。90岁的老爸在前面慢悠悠的走着,用浓郁的河南话问正在赶路的几个老人家,:“你们是哪里人呀?”其中一个扛着锄头的老人家声如洪钟的答到:“我们是祖祖辈辈生活在这里的漫川关人。你是河南人吧?”看着老爸点点头老人家继续说,“这里可是一鸡鸣三省的地方,河南,陕西,湖北交界处”。老
京东家电年销售额是去年的1300%,主要来自于他....
Shanshan小课堂
经过大半个月角逐纠缠,时间终于来到6月18日,618全球年中购物节迎来最高潮。作为国内最大的家电零售平台,京东家电从18日0点开始,便开启了飞速狂奔的模式,仅8分钟销售额就突破20亿元!展现出强劲的增长势头与家电主场的王者霸气的同时,也让各家电品牌实现了爆发式增长,美的、海尔、格力、奥克斯均在3分钟内突破1亿元大关。在今年的618中,除了消费者已经熟悉的网购形式外,线上线下联动的融合模式、社交电商
编程算法:技术创新的引擎与业务增长的核心驱动力
在数字经济时代,算法已成为推动技术创新与业务增长的隐形引擎。从存内计算突破冯·诺依曼瓶颈,到动态规划优化万亿级金融交易,编程算法正在重塑产业竞争格局。一、存内计算:突破冯·诺依曼瓶颈的算法革命1.1存内计算的基本原理传统计算架构中90%的能耗消耗在数据搬运上。存内计算(Processing-in-Memory)通过直接在存储单元执行计算,实现能效10-100倍提升:#传统计算vs存内计算能耗模型i
图论算法经典题目解析:DFS、BFS与拓扑排序实战
周童學
数据结构与算法 深度优先 算法 图论
图论算法经典题目解析:DFS、BFS与拓扑排序实战图论问题是算法面试中的高频考点,本博客将通过四道LeetCode经典题目(均来自"Top100Liked"题库),深入讲解图论的核心算法思想和实现技巧。涵盖DFS、BFS、拓扑排序和前缀树等知识点,每道题配有Java实现和易错点分析。1.岛屿数量(DFS遍历)问题描述给定一个由'1'(陆地)和'0'(水)组成的二维网格,计算岛屿的数量。岛屿由水平或
基于redis的Zset实现作者的轻量级排名
周童學
Java redis 数据库 缓存
基于redis的Zset实现轻量级作者排名系统在今天的技术架构中,Redis是一种广泛使用的内存数据存储系统,尤其在需要高效检索和排序的场景中表现优异。在本篇博客中,我们将深入探讨如何使用Redis的有序集合(ZSet)构建一个高效的笔记排行榜系统,并提供相关代码示例和详细的解析。1.功能背景与需求假设我们有一个笔记分享平台,用户可以发布各种笔记,系统需要根据用户发布的笔记数量来生成一个实时更新的
【项目实战】 容错机制与故障恢复:保障系统连续性的核心体系
本本本添哥
004 - 研效与DevOps运维工具链 002 - 进阶开发能力 分布式
在分布式系统中,硬件故障、网络波动、软件异常等问题难以避免。容错机制与故障恢复的核心目标是:通过主动检测故障、自动隔离风险、快速转移负载、重建数据一致性,最大限度减少故障对业务的影响,保障系统“持续可用”与“数据不丢失”。以下从核心机制、实现方式、典型案例等维度展开说明。一、故障检测:及时发现异常节点故障检测是容错的第一步,需通过多维度手段实时感知系统组件状态,确保故障被快速识别。1.健康检查与心
ios内付费
374016526
ios 内付费
近年来写了很多IOS的程序,内付费也用到不少,使用IOS的内付费实现起来比较麻烦,这里我写了一个简单的内付费包,希望对大家有帮助。
具体使用如下:
这里的sender其实就是调用者,这里主要是为了回调使用。
[KuroStoreApi kuroStoreProductId:@"产品ID" storeSender:self storeFinishCallBa
20 款优秀的 Linux 终端仿真器
brotherlamp
linux linux视频 linux资料 linux自学 linux教程
终端仿真器是一款用其它显示架构重现可视终端的计算机程序。换句话说就是终端仿真器能使哑终端看似像一台连接上了服务器的客户机。终端仿真器允许最终用户用文本用户界面和命令行来访问控制台和应用程序。(LCTT 译注:终端仿真器原意指对大型机-哑终端方式的模拟,不过在当今的 Linux 环境中,常指通过远程或本地方式连接的伪终端,俗称“终端”。)
你能从开源世界中找到大量的终端仿真器,它们
Solr Deep Paging(solr 深分页)
eksliang
solr深分页 solr分页性能问题
转载请出自出处:http://eksliang.iteye.com/blog/2148370
作者:eksliang(ickes) blg:http://eksliang.iteye.com/ 概述
长期以来,我们一直有一个深分页问题。如果直接跳到很靠后的页数,查询速度会比较慢。这是因为Solr的需要为查询从开始遍历所有数据。直到Solr的4.7这个问题一直没有一个很好的解决方案。直到solr
数据库面试题
18289753290
面试题 数据库
1.union ,union all
网络搜索出的最佳答案:
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
2.索引有哪些分类?作用是
Android TV屏幕适配
酷的飞上天空
android
先说下现在市面上TV分辨率的大概情况
两种分辨率为主
1.720标清,分辨率为1280x720.
屏幕尺寸以32寸为主,部分电视为42寸
2.1080p全高清,分辨率为1920x1080
屏幕尺寸以42寸为主,此分辨率电视屏幕从32寸到50寸都有
适配遇到问题,已1080p尺寸为例:
分辨率固定不变,屏幕尺寸变化较大。
如:效果图尺寸为1920x1080,如果使用d
Timer定时器与ActionListener联合应用
永夜-极光
java
功能:在控制台每秒输出一次
代码:
package Main;
import javax.swing.Timer;
import java.awt.event.*;
public class T {
private static int count = 0;
public static void main(String[] args){
Ubuntu14.04系统Tab键不能自动补全问题解决
随便小屋
Ubuntu 14.04
Unbuntu 14.4安装之后就在终端中使用Tab键不能自动补全,解决办法如下:
1、利用vi编辑器打开/etc/bash.bashrc文件(需要root权限)
sudo vi /etc/bash.bashrc
接下来会提示输入密码
2、找到文件中的下列代码
#enable bash completion in interactive shells
#if
学会人际关系三招 轻松走职场
aijuans
职场
要想成功,仅有专业能力是不够的,处理好与老板、同事及下属的人际关系也是门大学问。如何才能在职场如鱼得水、游刃有余呢?在此,教您简单实用的三个窍门。
第一,多汇报
最近,管理学又提出了一个新名词“追随力”。它告诉我们,做下属最关键的就是要多请示汇报,让上司随时了解你的工作进度,有了新想法也要及时建议。不知不觉,你就有了“追随力”,上司会越来越了解和信任你。
第二,勤沟通
团队的力
《O2O:移动互联网时代的商业革命》读书笔记
aoyouzi
读书笔记
移动互联网的未来:碎片化内容+碎片化渠道=各式精准、互动的新型社会化营销。
O2O:Online to OffLine 线上线下活动
O2O就是在移动互联网时代,生活消费领域通过线上和线下互动的一种新型商业模式。
手机二维码本质:O2O商务行为从线下现实世界到线上虚拟世界的入口。
线上虚拟世界创造的本意是打破信息鸿沟,让不同地域、不同需求的人
js实现图片随鼠标滚动的效果
百合不是茶
JavaScript 滚动属性的获取 图片滚动 属性获取 页面加载
1,获取样式属性值
top 与顶部的距离
left 与左边的距离
right 与右边的距离
bottom 与下边的距离
zIndex 层叠层次
例子:获取左边的宽度,当css写在body标签中时
<div id="adver" style="position:absolute;top:50px;left:1000p
ajax同步异步参数async
bijian1013
jquery Ajax async
开发项目开发过程中,需要将ajax的返回值赋到全局变量中,然后在该页面其他地方引用,因为ajax异步的原因一直无法成功,需将async:false,使其变成同步的。
格式:
$.ajax({ type: 'POST', ur
Webx3框架(1)
Bill_chen
eclipse spring maven 框架 ibatis
Webx是淘宝开发的一套Web开发框架,Webx3是其第三个升级版本;采用Eclipse的开发环境,现在支持java开发;
采用turbine原型的MVC框架,扩展了Spring容器,利用Maven进行项目的构建管理,灵活的ibatis持久层支持,总的来说,还是一套很不错的Web框架。
Webx3遵循turbine风格,velocity的模板被分为layout/screen/control三部
【MongoDB学习笔记五】MongoDB概述
bit1129
mongodb
MongoDB是面向文档的NoSQL数据库,尽量业界还对MongoDB存在一些质疑的声音,比如性能尤其是查询性能、数据一致性的支持没有想象的那么好,但是MongoDB用户群确实已经够多。MongoDB的亮点不在于它的性能,而是它处理非结构化数据的能力以及内置对分布式的支持(复制、分片达到的高可用、高可伸缩),同时它提供的近似于SQL的查询能力,也是在做NoSQL技术选型时,考虑的一个重要因素。Mo
spring/hibernate/struts2常见异常总结
白糖_
Hibernate
Spring
①ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
缺少aspectjweaver.jar,该jar包常用于spring aop中
②java.lang.ClassNotFoundException: org.sprin
jquery easyui表单重置(reset)扩展思路
bozch
form jquery easyui reset
在jquery easyui表单中 尚未提供表单重置的功能,这就需要自己对其进行扩展。
扩展的时候要考虑的控件有:
combo,combobox,combogrid,combotree,datebox,datetimebox
需要对其添加reset方法,reset方法就是把初始化的值赋值给当前的组件,这就需要在组件的初始化时将值保存下来。
在所有的reset方法添加完毕之后,就需要对fo
编程之美-烙饼排序
bylijinnan
编程之美
package beautyOfCoding;
import java.util.Arrays;
/*
*《编程之美》的思路是:搜索+剪枝。有点像是写下棋程序:当前情况下,把所有可能的下一步都做一遍;在这每一遍操作里面,计算出如果按这一步走的话,能不能赢(得出最优结果)。
*《编程之美》上代码有很多错误,且每个变量的含义令人费解。因此我按我的理解写了以下代码:
*/
Struts1.X 源码分析之ActionForm赋值原理
chenbowen00
struts
struts1在处理请求参数之前,首先会根据配置文件action节点的name属性创建对应的ActionForm。如果配置了name属性,却找不到对应的ActionForm类也不会报错,只是不会处理本次请求的请求参数。
如果找到了对应的ActionForm类,则先判断是否已经存在ActionForm的实例,如果不存在则创建实例,并将其存放在对应的作用域中。作用域由配置文件action节点的s
[空天防御与经济]在获得充足的外部资源之前,太空投资需有限度
comsci
资源
这里有一个常识性的问题:
地球的资源,人类的资金是有限的,而太空是无限的.....
就算全人类联合起来,要在太空中修建大型空间站,也不一定能够成功,因为资源和资金,技术有客观的限制....
&
ORACLE临时表—ON COMMIT PRESERVE ROWS
daizj
oracle 临时表
ORACLE临时表 转
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前
会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到。临时表不存在并发行为,因为他们对于当前会话都是独立的。
创建临时表时,ORACLE只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,ORALCE会
基于Nginx XSendfile+SpringMVC进行文件下载
denger
应用服务器 Web nginx 网络应用 lighttpd
在平常我们实现文件下载通常是通过普通 read-write方式,如下代码所示。
@RequestMapping("/courseware/{id}")
public void download(@PathVariable("id") String courseID, HttpServletResp
scanf接受char类型的字符
dcj3sjt126com
c
/*
2013年3月11日22:35:54
目的:学习char只接受一个字符
*/
# include <stdio.h>
int main(void)
{
int i;
char ch;
scanf("%d", &i);
printf("i = %d\n", i);
scanf("%
学编程的价值
dcj3sjt126com
编程
发一个人会编程, 想想以后可以教儿女, 是多么美好的事啊, 不管儿女将来从事什么样的职业, 教一教, 对他思维的开拓大有帮助
像这位朋友学习:
http://blog.sina.com.cn/s/articlelist_2584320772_0_1.html
VirtualGS教程 (By @林泰前): 几十年的老程序员,资深的
二维数组(矩阵)对角线输出
飞天奔月
二维数组
今天在BBS里面看到这样的面试题目,
1,二维数组(N*N),沿对角线方向,从右上角打印到左下角如N=4: 4*4二维数组
{ 1 2 3 4 }
{ 5 6 7 8 }
{ 9 10 11 12 }
{13 14 15 16 }
打印顺序
4
3 8
2 7 12
1 6 11 16
5 10 15
9 14
13
要
Ehcache(08)——可阻塞的Cache——BlockingCache
234390216
并发 ehcache BlockingCache 阻塞
可阻塞的Cache—BlockingCache
在上一节我们提到了显示使用Ehcache锁的问题,其实我们还可以隐式的来使用Ehcache的锁,那就是通过BlockingCache。BlockingCache是Ehcache的一个封装类,可以让我们对Ehcache进行并发操作。其内部的锁机制是使用的net.
mysqldiff对数据库间进行差异比较
jackyrong
mysqld
mysqldiff该工具是官方mysql-utilities工具集的一个脚本,可以用来对比不同数据库之间的表结构,或者同个数据库间的表结构
如果在windows下,直接下载mysql-utilities安装就可以了,然后运行后,会跑到命令行下:
1) 基本用法
mysqldiff --server1=admin:12345
spring data jpa 方法中可用的关键字
lawrence.li
java spring
spring data jpa 支持以方法名进行查询/删除/统计。
查询的关键字为find
删除的关键字为delete/remove (>=1.7.x)
统计的关键字为count (>=1.7.x)
修改需要使用@Modifying注解
@Modifying
@Query("update User u set u.firstna
Spring的ModelAndView类
nicegege
spring
项目中controller的方法跳转的到ModelAndView类,一直很好奇spring怎么实现的?
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* yo
搭建 CentOS 6 服务器(13) - rsync、Amanda
rensanning
centos
(一)rsync
Server端
# yum install rsync
# vi /etc/xinetd.d/rsync
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait
Learn Nodejs 02
toknowme
nodejs
(1)npm是什么
npm is the package manager for node
官方网站:https://www.npmjs.com/
npm上有很多优秀的nodejs包,来解决常见的一些问题,比如用node-mysql,就可以方便通过nodejs链接到mysql,进行数据库的操作
在开发过程往往会需要用到其他的包,使用npm就可以下载这些包来供程序调用
&nb
Spring MVC 拦截器
xp9802
spring mvc
Controller层的拦截器继承于HandlerInterceptorAdapter
HandlerInterceptorAdapter.java 1 public abstract class HandlerInterceptorAdapter implements HandlerIntercep