引入组件之后,table的数据由组件内部主动调用并返回,表格的每一列不再是 el-table-column
标签,而是由 columns
数组传递每一列信息,还包括了 loading、pagination
组件的逻辑,不用每次都处理同样的逻辑了。其中还包含了拖拽排序、选中操作等常用的功能。
开始写
下面看一下二次封装table组件的思路吧~
JSX写法
JSX
就是Javascript和XML结合的一种格式。React发明了JSX,利用HTML语法来创建虚拟DOM。当遇到 <
,JSX就当HTML解析,遇到 {
就当JavaScript解析。 我为什么用jsx呢?一方面是之前的一版template写法写的实在是看着很"chou",另一方面想学习jsx语法和render函数官方文档看这里。
主思路
从结构上来看,主要分为两部分:table
和 pagination
,而 table
中又有 column
。
其次就是数据的加载和过滤,默认主动调用数据加载,统一处理好数据结构(table
所需的 list
,分页组件所需的数据等)后,按需返回。
拖动功能的初始化和处理。
table数据的更新机制。
所以主结构是这样的:
render () {
return (
{ this.renderTable() }
{ this.renderPage() }
)
}
因为分页组件根据外部props属性决定使用或者不使用,并且有一些自定义样式,所以改成这样:
render () {
return (
{ this.renderTable() }
{ this.showPagination ? this.renderPage() : '' }
)
}
renderTable
下面看一下 renderTable
中是怎么写的:
/**
* renderTable
*/
renderTable () {
const props = {
border: true, // table的边框
size: this.tableSize, // table的大小
data: this.dataList, // table需要的数据
}
return (
// 选中所有行的回调
{this.columns.map(item => this.renderTableColumn(item))} // 遍历每一列
)
},
renderTable主要思路就是 :先配好 table 的属性 props
,return 里返回 table 的结构,结构里 绑定属性和方法
。里面的每一列用 mpa
函数遍历,再用 renderTableColumn
渲染。
renderTableColumn
渲染列的render函数:
/**
* renderColumn
*/
renderTableColumn (item) {
// TableColumn配置的属性
const props = {
prop: item.desc,
label: item.name,
align: 'center',
key: item.desc,
width: item.fixedWidth == undefined ? 'auto' : item.fixedWidth,
minWidth: item.width == undefined ? 'auto' : item.width,
fixed: item.fixed,
showOverflowTooltip: item.tooltip ? true : false,
sortable: item.sortable ? 'custom' : false
}
return (
// 这里需要判断当前列(item.type)的属性,如果有type(通常type用于带select选项的列)就展示带type的列。如果没有就展示正常列。
item.type
? // 带type的列
: {
if (item.slot) {
// 如果设置了slot,就设置一个插槽并且自带返回值
return this.$scopedSlots[item.desc](scope)
} else if (item.pic) {
// 如果设置了pic,就返回一个img的结构
return ( )
} else if (item.click) {
// 如果带有点击事件的,就设置点击后的回调,还带有filter的回调。
return ({item.filter ? item.filterFun(scope.row) : scope.row[item.desc]}
)
} else {
// 除去以上几种,普通的都直接返回通用的dom结构,带tooltip、filter的回调。
return ({item.filter ? item.filterFun(scope.row) : scope.row[item.desc]}
)
}
}
}}}/>
)
},
renderTableColumn主要思路就是 :首先每一列的信息进来先看有没有带type,常见的就是带选择框的(也就是type="selection")的,如果是就展示带type的列,如果不是就正常列。
正常列里面如果是带有插槽属性的,就设置一个插槽并传递参数(插槽相关知识可以参考这篇); 如果设置了本列需要展示pic,就返回一个img结构; 如果设置带有点击事件,那就返回一个带有点击回调的结构; 其余的都返回正常结构,并带有tooltip、filter的回调。
renderPage
渲染分页组件的render函数:
/**
* renderPage
*/
renderPage () {
const props = {
background: true,
small: this.pageSmall,
currentPage: this.currentPage,
pageSizes: [15, 30, 60, 120],
pageSize: this.pageSize,
total: this.total,
layout: 'total, sizes, prev, pager, next, jumper'
}
return (
)
},
同样的思路:设置props,绑定属性和方法。
数据加载
结构大概搭好之后考虑一下数据问题,默认是主动加载数据的,但也有不需要一加载组件就请求数据的,所以我们在mounted函数内以 isInit
属性按需请求,下面是 loadData
函数:
/**
* 数据加载
*/
loadData () {
this.tableLoading = true // table的loading
const param = this.showPagination // 分页信息
? { page: this.currentPage, size: this.pageSize }
: ''
if (this.data && this.data instanceof Array) { // 如果数据是数组就直接赋值给dataList
this.tableLoading = false
this.dataList = this.data
// 调用初始化拖动方法
this.dragInit()
} else {
// 如果data是一个返回值是promise的函数,就调用并then。
const result = this.data(param)
if ((typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function') {
result.then(rsp => {
// 处理数据,给table组件、给分页组件
this.currentPage = rsp.data.currentPage
this.total = rsp.data.totalElement
this.tableLoading = false
this.dataList = rsp.data.list
// 如果父组件需要返回值就发送过去
if (this.needData) {
this.$emit('allBackData', rsp.data)
this.$emit('backData', rsp.data.list, this.currentPage, this.pageSize)
}
// 调用初始化拖动方法
this.dragInit()
})
}
}
},
采用组件内调用获取数据方法是因为,基本在和后端小伙伴定义数据结构的时候就统一了 table 和 pagination 的结构,所以在组件内部统一过滤数据可以让调用者代码更简洁,如果调用者需要返回值则可以设置属性。
拖动功能
拖动要引入 import Sortable from 'sortablejs'
,父组件调用时如果设置了 drag
那么组件内将初始化拖动功能。看一下初始化拖动的方法:
/**
* 设置拖动
*/
setSort () {
const el = this.$refs.multipleTable.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0]
if (this.drag && !this.sortable) { // 如果没有创建sortable则创建
this.sortable = Sortable.create(el, {
ghostClass: 'sortable-ghost', // Class name for the drop placeholder,
setData (dataTransfer) {
dataTransfer.setData('Text', '')
},
onEnd: evt => { // 拖动后
const tempIndex = this.newList.splice(evt.oldIndex, 1)[0] // 获取当前拖动选项的id
this.newList.splice(evt.newIndex, 0, tempIndex) // 在新列表里的新位置插入拖动选项的id
this.$emit('newSort', this.newList) // 发送给父组件新列表
// 拖动后需同步table内data数据
this.dataList.splice(evt.newIndex, 0, this.dataList.splice(evt.oldIndex, 1)[0]) // 在tableList的新位置插入拖动选项的数据
let newArray = this.dataList.slice(0)
this.dataList = []
this.$nextTick(() => {
this.dataList = newArray // 重新赋值给dataList
})
}
})
} else if (!this.drag && this.sortable) { // 如果不需要拖动 但是创建过sortable 那就销毁
this.sortable.destroy()
this.sortable = null
}
},
拖动后首先获取到当前拖动项的id,放到列表的新位置上,发送给父组件。 之后table的数据也需要同步顺序,把当前拖动项的数据放到新的位置上返回一个新的数组,等到dom结构更新完成之后,重新赋值给dataList,这样就可以保证看到列表的顺序和实际的顺序是一样的。
数据更新
有一些业务场景需要更新table的数据,所以组件里写了一个 refresh
的方法,方便父组件更新数据。
/**
* 表格重新加载方法
* 如果参数为 true, 则强制刷新到第一页
* @param Boolean bool
*/
refresh (bool = false) {
if (bool) {
this.currentPage = 1
}
this.loadData()
},
总结
整体思路大概就是这样,其中的一些逻辑也是根据后来业务需求加上的,还有一些分页、框选等相关方法这里没过多解释,完整代码戳这里~
你可能感兴趣的:(后台管理系统element-admin——table组件二次封装)
React Hooks forwardRef useImperativeHandle TypeScript类型 最佳实践
m0_67265464
面试 学习路线 阿里巴巴 java java进阶 后端
定义官网文档forwardRef:转发refuseImperativeHandle:用于自定义暴露给父组件的实例值版本"react":"^17.0.2""@types/react":"^17.0.44"代码父组件import{FC,useEffect,useRef}from'react';//导入子组件importChildComponent,{IRefProps}from'./ChildComp
详谈React中 forwardRef、useImperativeHandle的使用场景
凉菜凉凉
React#+技术分享 react.js javascript 前端
forwardRef(render)允许组件使用ref将DOM节点暴露给父组件constSomeComponent=forwardRef(render)参数render:组件的渲染函数。React会调用该函数并传入父组件传递的props和ref。返回的JSX将作为组件的输出。返回值forwardRef返回一个可以在JSX中渲染的React组件。与作为纯函数定义的React组件不同,forwardR
记-react-connect中使用forwardRef 问题。
$(薛定谔的喵)
web前端 React js react redux 前端
记-react-connect中使用forwardRef问题。最近在dvajs中使用onRef的过程中,需要给绑定connect的组件透传forwardRef类似这样的形式:importReact,{forwardRef,useImperativeHandle,useState,useEffect}from'react';import{connect}from'dva'constC2=forwar
题解:洛谷 P4113 [HEOI2012] 采花
网络骑士hrg.
算法
题目https://www.luogu.com.cn/problem/P4113运用类似于P1972[SDOI2009]HH的项链的操作,将数据离线下来处理。按照区间右端点从小到大排序。问题是数量大于等于的时候才能算进去。于是乎我们用两个数组维护倒数第二次出现和最后一次出现的地方。每次在树状数组中仅保留倒数第二次出现的贡献。实现#includeusingnamespacestd;#definein
forwardRef
懒人村杂货铺
前端
`forwardRef`是React提供的一种高级API,用于在函数组件中转发(forward)`ref`到子组件的DOM元素或类组件。这对于需要直接操作子组件的DOM节点或获取子组件实例的情况非常有用。###如何使用`forwardRef`####示例假设我们有一个自定义的输入框组件`FancyInput`,我们希望通过父组件能够直接访问这个输入框的DOM节点,以便在父组件中调用焦点(focus
如何使用Django中间件
AI航海家(Ethan)
Django python 后端框架 django 中间件 python 后端 postgresql
如何使用Django中间件让访问更安全?嘿,朋友们!今天我们来聊聊如何在Django中使用自定义中间件保证某个文件夹的访问需要token验证。毕竟,有时候我们需要确保只有合法用户才能访问某些资源,对不对?什么是中间件?简单来说,中间件就是一种在Django应用请求和响应过程中拦截并处理请求的组件。它们在请求到达视图之前、在响应到达客户端之前能够进行各种操作。比如本次,我们将实现一个简单的token
响应式编程RxJava
剑客狼心
rxjava android
了解回调的通常都听过回调地狱。所谓回调指的是将一个方法(或代码块、函数)作为参数传递给另一个方法。当某个操作完成时,后者会调用这个传递过来的方法。常用于异步编程或事件驱动编程,用来处理异步操作的结果。看下面的代码,模拟网络连接请求,请求需要消耗一定时间,因此同步运行会造成明显的顿感。publicclassNetworkRequest{publicCompletableFuturemakeReque
Spring框架常用注解详解
二的10次方
Spring全家桶 Java spring java 后端
Spring框架作为Java开发中最受欢迎的开源框架之一,其强大的功能很大程度上得益于其丰富的注解(Annotation)支持。本文对Spring框架中常用的注解进行详细解析,并通过示例来展示它们的用法和效果。1.组件注解@Component这是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次。当不知道一个类归属于哪个层时,可以使用@Component注解标注。使用案例:@Comp
druid mysql读写分离_Spring Boot + Mybatis + Druid 实现MySQL一主多从读写分离
咖啡碎冰冰
druid mysql读写分离
SpringBoot读写分离实现原理实现方式主要是通过扩展SpringAbstractRoutingDataSource这个类充当DataSource路由中介,在运行当中根据自定义KEY值动态切换正真的DataSource。具体实现创建测试库、表:createdatabase`mytest_db`;CREATETABLE`t_user`(`id`int(11)NOTNULLAUTO_INCREME
行为型模式-备忘录模式
格林希尔
设计模式 备忘录模式 python 开发语言
行为型模式-备忘录模式备忘录模式(Memento)解决对象状态存储问题描述适用环境优点:缺点:违反原则代码实现备忘录模式(Memento)解决对象状态存储问题描述通过封装一个对象的状态,并将其保存在外部,从而实现了该对象状态的备份和恢复。这种方式可以提高代码的灵活性和可维护性,同时也能够减少代码对于状态存储的依赖。适用环境当需要保存和恢复对象的状态时使用;当直接访问对象的成员变量或方法不利于代码设
【PyQt5 应用程序】PyQt基础组件:API接口调用
Mr数据杨
Python 实用程序 qt pyqt 数据库
在构建PyQt应用程序时,理解组件的基本操作和信号槽机制至关重要。PyQt提供了丰富的组件,如按钮、文本框、滑块等,可以与用户产生交互。在这些交互中,使用API接口处理事件响应是开发的核心内容。本教程将通过几个实际应用示例,展示如何利用PyQt的信号槽机制,将组件与API接口进行有效链接,进而构建响应式应用程序。文章目录事件处理与信号槽机制QPushButton与clicked信号QLineEdi
TCP封装数据帧
hc_bmxxf
tcp/ip 网络 服务器
void*send_data(void*arg)//这是一个发送数据的线程{intsockfd=init_tcp_cli("192.168.0.148",50000)//传ip和port,port==50000是因为大概前五万都被其它服务所占用,50000后是私人ipif(sockfd<0){returnNULL;}unsignedcharpack[128]={0};intlen=0;while(
cocos creator从零开发五子棋(07)-胜负ui
cocos
Canvas节点下新建空节点panelSettle,挂载Widget组件并勾选Top、Right、Bottom、Left把这些属性都设置为0,挂载BlockInputEvents组件。panelSettle节点下新建Label(文字)并重命名为lblMsg,PositionY设置为100,Color设置为#19FF00,FontSize和LineHeight都设置为100。panelSettle节
C++设计模式——Memento备忘录模式
程序员与背包客_CoderZ
C/C++设计模式 设计模式 备忘录模式 linux c++ 开发语言 c语言
一,备忘录模式的定义备忘录模式是一种行为型设计模式,它允许将对象的状态保存在外部,并在需要时恢复。备忘录模式允许在不破坏封装性的前提下,捕获并存储一个对象的内部状态,并在需要时将其恢复到之前的状态。在某些开发场景,备忘录模式可以用于缓存函数的结果,避免重复计算,以提高性能。在软件开发中,备忘录模式常应用于某些计算密集型、IO密集型的操作场景,例如数据分析、图形处理等。备忘录模式在现实生活中的抽象实
Java 中的 HashMap 和 Hashtable 有什么区别?
一只蜘猪
java 哈希算法 开发语言
一、线程安全性特性HashMapHashtable线程安全非线程安全,需手动同步或使用ConcurrentHashMap所有方法使用synchronized修饰,线程安全锁机制无锁,多线程操作需外部同步全表锁,并发性能较低适用场景单线程或需要高并发性能的场景遗留代码维护,不推荐新项目使用示例代码对比://HashMap在多线程下需同步MaphashMap=newHashMaphashtable=n
深入浅出 Spring Cloud 微服务:架构、核心组件与应用实践
风亦辰739
spring spring cloud 微服务
随着互联网应用规模的扩大和复杂度的提升,传统的单体架构难以满足企业对于高并发、高可用性和快速迭代的需求。微服务架构成为一种解决方案,帮助企业将应用拆分为多个小型服务模块,各模块独立开发、部署和扩展。SpringCloud作为微服务架构的核心框架,提供了一整套工具和规范,极大简化了微服务开发与管理的难度。本文将带你了解SpringCloud微服务的架构、核心组件以及实际应用场景,帮助开发者快速上手并
Ubuntu 20.04 安装AppImage格式的文件
viacm
Ubuntu
问题描述:修改AppImage权限,增加可执行权限,双击无法安装的话看下述教程安装appimagelauncher#addthisppatosystemsudoadd-apt-repositoryppa:appimagelauncher-team/stablesudoapt-getupdate#installappimagelauncheraptinstallappimagelauncher使用a
在Vue项目中使用高德地图Marker
小刘哥007
Vue实战 vue.js 前端 javascript
目录前置准备1.创建Vue项目2.安装高德地图SDK实现Marker组件1.创建Map.vue组件2.使用Map组件运行项目高级功能1.动态添加和删除Marker2.自定义Marker样式3.添加信息窗体性能优化前置准备1.创建Vue项目首先,我们需要创建一个Vue项目。如果你还没有安装VueCLI,可以通过以下命令安装:npminstall-g@vue/cli然后,创建一个新的Vue项目:vue
Python网络编程05----django与数据库的交互
翻滚吧挨踢男
Python python 网络编程
介绍Django为多种数据库后台提供了统一的调用API,在Django的帮助下,我们不用直接编写SQL语句。Django将关系型的表(table)转换成为一个类(class)。而每个记录(record)是该类下的一个对象(object)。我们可以使用基于对象的方法,来操纵关系型数据库。设置数据库设置数据库需要修改settings.py文件如果使用的数据库是mysql:[python]viewpla
图论练习题(存起来练)
Wuliwuliii
图论练习题
=============================以下是最小生成树+并查集======================================【HDU】1213HowManyTables基础并查集★1272小希的迷宫基础并查集★1325&&poj1308IsItATree?基础并查集★1856Moreisbetter基础并查集★1102ConstructingRoads基础最小生成
【HDOJ图论题集】【转】
aiyuneng5167
java 人工智能
1=============================以下是最小生成树+并查集======================================2【HDU】31213HowManyTables基础并查集★41272小希的迷宫基础并查集★51325&&poj1308IsItATree?基础并查集★61856Moreisbetter基础并查集★71102ConstructingRoad
图论500题
Dillonh
迷之图论
PS:没找到这套题的原作者,非常感谢他的总结~最小生成树+并查集【HDU】1213HowManyTables基础并查集★1272小希的迷宫基础并查集★1325&&poj1308IsItATree?基础并查集★1856Moreisbetter基础并查集★1102ConstructingRoads基础最小生成树★1232畅通工程基础并查集★1233还是畅通工程基础最小生成树★1863畅通工程基础最小生
C++之线程池(Thread Pool)
画个逗号给明天"
开发语言 c++
1.介绍线程池是一种并发编程的设计模式,用于管理和复用多个线程。以避免频繁创建和销毁线程的开销。线程池的核心思想是预先创建一组线程,并将任务分配给这些线程执行,从而提高程序的性能和资源利用率。2.线程池的核心组件一个经典的线程池包含以下组件:(1)任务队列(TaskQueue):用于存储待执行的任务。通常是一个线程安全的队列(如queue>)。(2)工作线程(workerThreads):一组预先
【stable diffusion模型】Stable diffusion模型分几种?一文详解,入门必看!
AIGC-Lison
stable diffusion 人工智能 AI绘画 AIGC SD模型
前言在StableDiffusion中,模型并不只有一种,不同插件有不同的模型,分别作用于不同的功能。今天Lison老师就带大家一起来学习一下~01大模型也就是stablediffusion模型,在默认界面中,它位于web页面的左上角,下拉列表对应的模型:可以理解为绘画风格集合,SD需要大模型来规定它生成的图片风格,大模型是必选模型,你必须选择一个大模型才能开始生成工作。所有的AI设计工具,安装包
jQuery.ajax
weixin_48357623
前端 jquery ajax 前端
下面是关于FetchAPI、umi-request、jQuery.ajax和axios的对比表格:FetchAPIumi-requestjQuery.ajaxaxios技术基础基于Promise的现代浏览器API基于fetch的封装,提供统一API和请求层治理原生JavaScript中的XMLHttpRequest封装基于Promise的HTTP客户端,封装XMLHttpRequest使用场景适用
【ElementUI实现table表格行拖拽切换顺序】
电竞蒋劲夫
ElementUI elementui 前端 javascript vue.js
实现效果逻辑思路通过el-table的row-class-name设置行的自定义class类名.在mounted和updated生命周期钩子中调用this.$nextTick,确保DOM元素渲染完成后,使用document.querySelectorAll获取所有.drag-row元素。设置dom的draggable(用于标识元素是否允许使用浏览器原生行为或HTML拖放操作API拖动。)为true
ipykernel-4.10.0-py2-none-any.whl文件解析与安装指南
嗹国学长
本文还有配套的精品资源,点击获取简介:PyPI是Python的软件包仓库,本篇将解析一个特定Python包——ipykernel的4.10.0版本。ipykernel是Jupyter项目的核心组件,用于创建和运行交互式Python内核。本指南将介绍其功能、特点和安装过程,并强调其在跨语言支持、异步I/O处理、调试和交互式通信等方面的重要性。用户可通过pip安装该版本,以支持Python2环境中的J
鸿蒙开发:简单自定义一个绘制画板
前言本篇文章,主要是使用Canvas绘制一个简单的画板,可以更改颜色,画笔粗细以及删除操作,主要运用到了CanvasRenderingContext2D中的绘制路径功能,我们可以看下基本实现的效果。若在一个画板上进行随意的绘制,少不了画布的存在,鸿蒙当中为我们提供了Canvas组件,使用它,我们可以在上面进行绘制各种想要的图形,共有两个构造参数,可以只接收一个context参数,主要用于设置绘制的
Stable Diffusion之最全详解图解
破碎的天堂鸟
学习教程 stable diffusion
StableDiffusion是一种革命性的图像生成模型,其发布标志着AI图像生成技术的一个重要里程碑。本文将通过详细的图解和实例演示,全面解析StableDiffusion的工作原理。一、StableDiffusion概览1.1模型起源与特点StableDiffusion由CompVis、StabilityAI和LAION的研究人员于2022年发布。它是一种基于扩散过程的图像生成模型,结合了物理
Conda添加新的Kernel
_TFboy
conda python 开发语言
官方说明:https://ipython.readthedocs.io/en/stable/install/kernel_install.html要向Conda添加一个新的内核(kernel),你可以按照以下步骤进行操作:确保你已经激活了你想要添加内核的Conda环境。运行以下命令激活环境:condaactivateyour_environment_name将“your_environment_n
项目中 枚举与注解的结合使用
飞翔的马甲
java enum annotation
前言:版本兼容,一直是迭代开发头疼的事,最近新版本加上了支持新题型,如果新创建一份问卷包含了新题型,那旧版本客户端就不支持,如果新创建的问卷不包含新题型,那么新旧客户端都支持。这里面我们通过给问卷类型枚举增加自定义注解的方式完成。顺便巩固下枚举与注解。
一、枚举
1.在创建枚举类的时候,该类已继承java.lang.Enum类,所以自定义枚举类无法继承别的类,但可以实现接口。
【Scala十七】Scala核心十一:下划线_的用法
bit1129
scala
下划线_在Scala中广泛应用,_的基本含义是作为占位符使用。_在使用时是出问题非常多的地方,本文将不断完善_的使用场景以及所表达的含义
1. 在高阶函数中使用
scala> val list = List(-3,8,7,9)
list: List[Int] = List(-3, 8, 7, 9)
scala> list.filter(_ > 7)
r
web缓存基础:术语、http报头和缓存策略
dalan_123
Web
对于很多人来说,去访问某一个站点,若是该站点能够提供智能化的内容缓存来提高用户体验,那么最终该站点的访问者将络绎不绝。缓存或者对之前的请求临时存储,是http协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这是受控于对该内容所声明的缓存策略。接下来将讨web内容缓存策略的基本概念,具体包括如如何选择缓存策略以保证互联网范围内的缓存能够正确处理的您的内容,并谈论下
crontab 问题
周凡杨
linux crontab unix
一: 0481-079 Reached a symbol that is not expected.
背景:
*/5 * * * * /usr/IBMIHS/rsync.sh
让tomcat支持2级域名共享session
g21121
session
tomcat默认情况下是不支持2级域名共享session的,所有有些情况下登陆后从主域名跳转到子域名会发生链接session不相同的情况,但是只需修改几处配置就可以了。
打开tomcat下conf下context.xml文件
找到Context标签,修改为如下内容
如果你的域名是www.test.com
<Context sessionCookiePath="/path&q
web报表工具FineReport常用函数的用法总结(数学和三角函数)
老A不折腾
Web finereport 总结
ABS
ABS(number):返回指定数字的绝对值。绝对值是指没有正负符号的数值。
Number:需要求出绝对值的任意实数。
示例:
ABS(-1.5)等于1.5。
ABS(0)等于0。
ABS(2.5)等于2.5。
ACOS
ACOS(number):返回指定数值的反余弦值。反余弦值为一个角度,返回角度以弧度形式表示。
Number:需要返回角
linux 启动java进程 sh文件
墙头上一根草
linux shell jar
#!/bin/bash
#初始化服务器的进程PId变量
user_pid=0;
robot_pid=0;
loadlort_pid=0;
gateway_pid=0;
#########
#检查相关服务器是否启动成功
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid
我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory
aijuans
Spring 3 系列
如何使用ApplicationContext替换BeanFactory?
package onlyfun.caterpillar.device;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import
Linux 内存使用方法详细解析
annan211
linux 内存 Linux内存解析
来源 http://blog.jobbole.com/45748/
我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。
一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。
Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用
数据库的单表查询常用命令及使用方法(-)
百合不是茶
oracle 函数 单表查询
创建数据库;
--建表
create table bloguser(username varchar2(20),userage number(10),usersex char(2));
创建bloguser表,里面有三个字段
&nbs
多线程基础知识
bijian1013
java 多线程 thread java多线程
一.进程和线程
进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序就是一个进程。
“多任务”:指操作系统能同时运行多个进程(程序)。如WINDOWS系统可以同时运行写字板程序、画图程序、WORD、Eclipse等。
线程:是进程内部单一的一个顺序控制流。
线程和进程
a. 每个进程都有独立的
fastjson简单使用实例
bijian1013
fastjson
一.简介
阿里巴巴fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库;包括“序列化”和“反序列化”两部分,它具备如下特征:
【RPC框架Burlap】Spring集成Burlap
bit1129
spring
Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。
这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
【Mahout一】基于Mahout 命令参数含义
bit1129
Mahout
1. mahout seqdirectory
$ mahout seqdirectory
--input (-i) input Path to job input directory(原始文本文件).
--output (-o) output The directory pathna
linux使用flock文件锁解决脚本重复执行问题
ronin47
linux lock 重复执行
linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。
例如:
<?
//
test
.php
java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
bylijinnan
java
public class OcuppyMoreThanHalf {
/**
* Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
* two solutions:
* 1.O(n)
* see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性
* 2.O(nlogn)
* 排序。中间
linux 系统相关命令
candiio
linux
系统参数
cat /proc/cpuinfo cpu相关参数
cat /proc/meminfo 内存相关参数
cat /proc/loadavg 负载情况
性能参数
1)top
M:按内存使用排序
P:按CPU占用排序
1:显示各CPU的使用情况
k:kill进程
o:更多排序规则
回车:刷新数据
2)ulimit
ulimit -a:显示本用户的系统限制参
[经营与资产]保持独立性和稳定性对于软件开发的重要意义
comsci
软件开发
一个软件的架构从诞生到成熟,中间要经过很多次的修正和改造
如果在这个过程中,外界的其它行业的资本不断的介入这种软件架构的升级过程中
那么软件开发者原有的设计思想和开发路线
在CentOS5.5上编译OpenJDK6
Cwind
linux OpenJDK
几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。
0. OpenJDK介绍
OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点:
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是
java乱码问题
dashuaifu
java乱码问题 js中文乱码
swfupload上传文件参数值为中文传递到后台接收中文乱码 在js中用setPostParams({"tag" : encodeURI( document.getElementByIdx_x("filetag").value,"utf-8")});
然后在servlet中String t
cygwin很多命令显示command not found的解决办法
dcj3sjt126com
cygwin
cygwin很多命令显示command not found的解决办法
修改cygwin.BAT文件如下
@echo off
D:
set CYGWIN=tty notitle glob
set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\us
[介绍]从 Yii 1.1 升级
dcj3sjt126com
PHP yii2
2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。
如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"入门篇"开始读起。
请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发
Linux SSH免登录配置总结
eksliang
ssh-keygen Linux SSH免登录认证 Linux SSH互信
转载请出自出处:http://eksliang.iteye.com/blog/2187265 一、原理
我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。
生成公钥与私钥有两种加密方式,第一种是
手势滑动销毁Activity
gundumw100
android
老是效仿ios,做android的真悲催!
有需求:需要手势滑动销毁一个Activity
怎么办尼?自己写?
不用~,网上先问一下百度。
结果:
http://blog.csdn.net/xiaanming/article/details/20934541
首先将你需要的Activity继承SwipeBackActivity,它会在你的布局根目录新增一层SwipeBackLay
JavaScript变换表格边框颜色
ini
JavaScript html Web html5 css
效果查看:http://hovertree.com/texiao/js/2.htm代码如下,保存到HTML文件也可以查看效果:
<html>
<head>
<meta charset="utf-8">
<title>表格边框变换颜色代码-何问起</title>
</head>
<body&
Kafka Rest : Confluent
kane_xie
kafka REST confluent
最近拿到一个kafka rest的需求,但kafka暂时还没有提供rest api(应该是有在开发中,毕竟rest这么火),上网搜了一下,找到一个Confluent Platform,本文简单介绍一下安装。
这里插一句,给大家推荐一个九尾搜索,原名叫谷粉SOSO,不想fanqiang谷歌的可以用这个。以前在外企用谷歌用习惯了,出来之后用度娘搜技术问题,那匹配度简直感人。
环境声明:Ubu
Calender不是单例
men4661273
单例 Calender
在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。
测试:
Calendar c1 =
线程内存和主内存之间联系
qifeifei
java thread
1, java多线程共享主内存中变量的时候,一共会经过几个阶段,
lock:将主内存中的变量锁定,为一个线程所独占。
unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。
read:将主内存中的变量值读到工作内存当中。
load:将read读取的值保存到工作内存中的变量副本中。
schedule和scheduleAtFixedRate
tangqi609567707
java timer schedule
原文地址:http://blog.csdn.net/weidan1121/article/details/527307
import java.util.Timer;import java.util.TimerTask;import java.util.Date;
/** * @author vincent */public class TimerTest {
erlang 部署
wudixiaotie
erlang
1.如果在启动节点的时候报这个错 :
{"init terminating in do_boot",{'cannot load',elf_format,get_files}}
则需要在reltool.config中加入
{app, hipe, [{incl_cond, exclude}]},
2.当generate时,遇到:
ERROR