原文链接:http://studygolang.com/articles/9154
情景:将工资条的内容发送到相应员工的邮箱中。 xlsx文件内容格式:
获取excel文件内容,使用第三方库:github.com/tealeg/xlsx 代码:
package main
import (
"fmt"
"github.com/tealeg/xlsx"
"log"
)
func main() {
excelFileName := "F:\\Test\\list.xlsx"
xlFIle, err := xlsx.OpenFile(excelFileName)
if err != nil {
log.Fatalln("err:" , err.Error())
}
for _, sheet := range xlFIle.Sheet{
for _, row := range sheet.Rows {
for _, cell := range row.Cells {
fmt.Printf("%s\n" , cell.Value)
}
}
}
}
知识点: xlsx操作excel文件先获取Sheet对象,代表excel文件的sheet,通过遍历Sheet对象,获取每个sheet的行结果Rows,对Rows遍历,就获取到了每个单元格的内容,封装在Cells对象中。
分割工资条 使用正则表达式,将每个人的工资条分开,如果读取到新的邮箱地址,就用新的存储空间存储工资条的内容。这里使用一个函数:isEmailRow()
func isEmailRow(r []string ) (isEmail bool , email string ) {
reg := regexp.MustCompile(`^[a-zA-Z_0-9.-]{1,64}@([a-zA-Z0-9-]{1,200}.){1,5}[a-zA-Z]{1,6}$` )
for _, v := range r{
if reg.MatchString(v) {
return true , v
}
}
return false , ""
}
isEmailRow函数接收的参数是数组,所以将单元格内容转换为数组形式,并且去除了空格和空行:
func _getCellValues(r *xlsx.Row) (cells []string ) {
for _, cell := range r.Cells{
txt := strings.Replace(strings.Replace(cell.Value, "\n" , "" , -1 )," " , "" , -1 )
cells = append (cells, txt)
}
return
}
使用map来存储每个人的工资条数据,并且用电子邮件作为键值,然后将数据组装成一个HTML的表格行代码(因为需要发送HTML格式的电子邮件才能以表格的形式展现)。于是,main里的循环代码就变成了这样:
sendList := make (map [string ]string )
for _, sheet := range xlFile.Sheets {
curMail := ""
for _, row := range sheet.Rows {
cells := getCellValues(row)
if isEmail, emailStr := isEmailRow(cells); isEmail {
curMail = emailStr
}
sendList[curMail] += fmt.Sprintf("%s " , strings.Join(cells, " "))
}
}
发送电子邮件
使用标准包:net/smtp就可以发送电子邮件 封装一个函数:
func sendToMail (user , password , host , to , subject , body , mailtype string ) error {
auth := smtp.PlainAuth("" , user, password, strings.Split(host, ":" ) [0 ])
msg := []byte("To: " + to + "\r\nFrom: " + user + "\r\nSubject: " + subject + "\r\n" + "Content-Type: text/" + mailtype + "; charset=UTF-8" + "\r\n\r\n" + body)
sendto := strings.Split(to, ";" )
err := smtp.SendMail(host, auth, user, sendto, msg)
return err
}
创建一个函数,遍历所有内容并调用发送邮件函数发送出去
func sendMail(sendList map [string]string) {
fmt.Printf("共需要发送%d 封邮件\n" , len(sendList))
index := 1
for mail, content := range sendList {
fmt.Printf("发送第%d 封" , index )
/* 将里边的用户名密码,smtp服务器换成自己的 */
if err := sendToMail("xxx@xxxxxx .com" ,
"xxxxxxx" ,
"smtp.xxxxxx.com:25" ,
mail,
"工资条" ,
fmt.Sprintf("" , content),
"html" ); err != nil {
fmt.Printf(" ... 发送错误(X) %s %s \n" , mail, err.Error())
} else {
fmt.Printf(" ... 发送成功(V) %s \n" , mail)
}
index ++
fmt.Printf(" \n" , content)
}
}
最后的main函数:
excelFileName := "F:\\Test\\list.xlsx"
xlFile, err := xlsx.OpenFile(excelFileName)
if err != nil {
log.Fatalln("err:" , err.Error())
}
sendList := make (map [string ]string )
for _, sheet := range xlFile.Sheets {
curMail := ""
for _, row := range sheet.Rows {
cells := getCellValues(row)
if isEmail, emailStr := isEmailRow(cells); isEmail {
curMail = emailStr
} else {
count := 0
for _, c := range cells {
if len (c) > 0 {
count++
}
}
if count > 1 {
sendList[curMail] += fmt.Sprintf("%s " , strings.Join(cells, "
"))
} else {
sendList[curMail] += fmt.Sprintf("%s " , len (cells), strings.Join(cells, "" ))
}
}
}
}
sendMail(sendList)
fmt.Print("按下回车结束" )
bufio.NewReader(os.Stdin).ReadLine()
亲测可用。作为学习收藏。
你可能感兴趣的:(GO语言)
Go语言学习笔记(三)
正在绘制中
Go语言学习之路 golang 学习 笔记
文章目录十一、结构体匿名结构体匿名字段十二、方法接收器十三、接口接口实现条件空接口类型断言十四、IO操作Reader文件操作相关APIWriterbufioioutil工具包综合示例十五、包和gomod包包的引用格式gomod十一、结构体Go语言可以通过自定义的方式形成新的类型,结构体就是这些类型中的一种复合类型,结构体是由零个或多个任意类型的值聚合成的实体,每个值都可以称为结构体的成员。结构体成
Go Web 项目实战:构建 RESTful API、命令行工具及应用部署
一小路一
掌握 Go 语言:编程世界的进阶钥匙 golang 面试 后端 开发语言
GoWeb项目实战:构建RESTfulAPI、命令行工具及应用部署Go语言因其简洁高效、并发支持强大等特点,已经成为了后端开发的热门选择之一。本篇文章将通过实战案例带领你学习如何使用Go构建一个简单的RESTfulAPI,开发命令行工具,并展示如何使用Docker部署Go应用。通过这些实战内容,你可以更好地理解Go在实际开发中的应用。1.构建一个简单的RESTfulAPIRESTfulAPI是基于
Windows系统中搭建Go语言开发环境详解
dvlinker
C/C++实战专栏 C/C++软件开发从入门到实战 windows golang 开发语言
目录1、Go语言简介2、安装Git3、Go工具链(编译器)安装3.1、环境变量GOROOT3.2、环境变量GOPATH3.3、Go常用命令4、包管理4.1、gomodule4.2、gopm5、编写Go语言代码的IDE或编辑工具5.1、基于VSCode的Go开发环境5.2、GoLand5.3、Vim5.4、其他Go代码编写工具6、Go语言学习资料分享VC++常用功能开发汇总(专栏文章列表,欢迎订阅,
Go语言学习笔记——类型转换工具库cast
PPPsych
Go精进 学习 golang
文章目录Golang类型转换工具库cast简介快速入门安装使用高级转换时间和时长转换时间类型的转换字符串转换为时间时长类型的转换转换为切片ToIntSliceEToStringSliceE转为`map[string]Type`类型Golang类型转换工具库cast简介cast可以在Go中轻松安全地从一种类型转换为另一种类型,cast提供了简单的函数来轻松地将数字转换为字符串,将接口转换为布尔值等。
Golang笔记——Interface类型
m0_74825634
面试 学习路线 阿里巴巴 golang 笔记 android
大家好,这里是,关注公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的interface数据结构类型,包括基本实现和使用等。文章目录Go语言中的`interface`详解接口定义实现接口空接口`interface{}`示例:空接口的使用interface类型判断1.类型断言(TypeAssertion)语法示例类型转换和类型断言的区别2.类型开关(TypeSwitch)
50周学习go语言:第五周 复合类型与词频统计
PyAIGCMaster
50周学习go语言 学习 golang 服务器
以下是第五周复合类型(数组、切片与映射)的详细学习内容,按照第四周的深度要求设计:第五周:复合类型与词频统计一、复合类型详解1.数组(Array)//声明与初始化vararr1[3]int//声明:[000]arr2:=[3]string{"A","B","C"}//显式初始化arr3:=[...]int{1,2,3}//编译器推断长度//特性://-固定长度(长度是类型的一部分)//-值传递(赋
MinIO Go 客户端 API
流年诠释一切
golang 开发语言 后端
MinIO是一个基于ApacheLicensev2.0开源协议的对象存储服务,与AmazonS3云存储服务兼容,适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。在Go语言中,可以使用MinIO官方提供的Go客户端库与MinIO服务进行交互。以下是关于在Go语言中使用MinIO的详细代码如下介绍:packageminioimport("bytes""conte
MQX - 基于 MySQL 的轻量级消息队列
MQX是一个基于MySQL的轻量级消息队列实现,以Go语言库的形式提供服务,无需额外部署消息服务器。1.项目介绍项目背景在中小型项目中,经常需要使用消息队列来解耦服务,但部署维护专门的消息中间件(如RocketMQ、Kafka)会带来额外的运维成本。MQX基于MySQL实现消息队列功能,复用现有的MySQL基础设施,降低系统复杂度。核心特性零部署:作为Go语言库集成,无需部署额外服务消息可靠:基于
2025-02-26:最小代价构造字符串。用go语言,给定一个目标字符串 target、一个字符串数组 words 和一个整数数组 costs,这两个数组的长度相同。 想象一个空字符串 s,你可以执行
福大大架构师每日一题
福大大架构师每日一题 golang 开发语言 后端
2025-02-26:最小代价构造字符串。用go语言,给定一个目标字符串target、一个字符串数组words和一个整数数组costs,这两个数组的长度相同。想象一个空字符串s,你可以执行以下操作任意次数(包括0次):1.从words数组中选择一个索引i,满足0≤i0{cur:=q[0]q=q[1:]fori,son:=rangecur.son[:]{ifson==nil{//虚拟子节点cur.s
Golang学习笔记_37——外观模式
LuckyLay
Golang学习笔记 golang 学习 笔记 设计模式 外观模式
Golang学习笔记_34——组合模式Golang学习笔记_35——代理模式Golang学习笔记_36——装饰器模式文章目录外观模式(FacadePattern)详解一、核心概念1.定义2.解决的问题3.核心角色4.类图二、特点分析三、适用场景1.计算机启动流程2.电商下单系统3.智能家居控制四、代码示例(Go语言)五、高级应用1.与单例模式结合2.分层外观设计六、与其他模式对比七、总结外观模式(
探秘MoonMQ:一款高速分布式消息队列系统
蒙丁啸Sharp
探秘MoonMQ:一款高速分布式消息队列系统moonmqafastdistributedmessagequeueimplementedwithgo项目地址:https://gitcode.com/gh_mirrors/mo/moonmq在当今的微服务架构和高并发场景下,消息队列作为连接各个服务的桥梁,其重要性不言而喻。今天,我们要向大家隆重推荐一个基于Go语言实现的高速分布式消息队列——MoonM
一文熟悉 Go 函数
challenge后端go
函数函数的英文单词是Function,这个单词还有着功能的意思。在Go语言中,函数是实现某一特定功能的代码块。函数代表着某个功能,可以在同一个地方多次使用,也可以在不同地方使用。因此使用函数,可以提高代码的复用性,减少代码的冗余。函数的声明通过案例了解函数的声明有哪几部分:定义一个函数,实现两个数相加的功能,并将相加之后的结果返回。funcAdd(num1int,num2int)int{varsu
go-mongox:简单高效,让文档操作和 bson 数据构造更流畅
后端gomongodb开源
前言在Go语言中使用MongoDB官方框架进行集合操作时,深深感到构建bson数据是一件非常繁琐的工作。字段、逗号,括号等符号的排列,让我感觉仿佛是在进行一场拼图游戏。因此我在想,有没有一个能让我丝滑,高效操作MongoDB的第三方框架呢,遗憾的是,并没有找到符合我预期的框架,索性我就自己动手开发了一个,这就是go-mongox框架的由来。如果你也有类似我的这种感受,相信go-mongox框架能给
Git图形化工具【lazygit】
Huazzi_
Git git lazygit
简要介绍一下偶然发现的Git图形化工具——「lazygit」概述Lazygit是一个用Go语言编写的Git命令行界面(TUI)工具,它让Git操作变得更加直观和高效。Github地址:https://github.com/jesseduffield/lazygit主要特点主要优势:图形化界面-虽然是终端中运行,但提供了清晰的可视化界面,显示文件状态、分支、提交历史等键盘快捷操作-几乎所有Git操作
golang range 的用法
学会了没
golang 开发语言 后端
在Go语言中,range关键字用于迭代遍历数组(array)、切片(slice)、映射(map)、字符串(string)和通道(channel)中的元素。它的基本语法和用法如下:1.遍历数组/切片nums:=[]int{2,3,4}//同时获取索引和值forindex,value:=rangenums{fmt.Printf(“索引:%d,值:%d\n”,index,value)}//仅获取索引fo
Golang深度学习
老狼伙计
golang 编程语言 云原生学习笔记 golang 开发语言
前言在2009年,Google公司发布了一种新的编程语言,名为Go(或称为Golang),旨在提高编程效率、简化并发编程,并提供强大的标准库支持。Go语言的设计者们希望通过Go语言能够解决软件开发中的一些长期存在的问题,比如并发编程的复杂性、垃圾回收机制的效率以及跨平台的兼容性等。以下是Go语言的一些关键背景和特性:并发编程Go语言内置了并发原语,如goroutines和channels,这使得并
50周学习go语言:第1周 环境搭建
PyAIGCMaster
50周学习go语言 学习 golang 开发语言
以下是为零基础学习者准备的详细第1周教程,包含环境搭建、工具配置和首个Go程序的完整操作指南:一、Go语言环境安装(Windows/macOS/Linux通用)1.下载安装包官网地址:https://go.dev/dl//根据系统选择对应版本:Windows:下载.msi文件(如go1.21.0.windows-amd64.msi)macOS:下载.pkg文件(如go1.21.0.darwin-a
以太坊DPOS私链搭建--使用gttc,搭建一个可用于性能测试的区块链框架(1)
过河卒啦啦啦
区块链研究 区块链 以太坊
遇到的一些坑bootnode一直不起作用,所以决定不用它,改用static-nodes.json在阿里云机器上编译gttc系统Ubuntu16.04想把eth服务部署到docker中方便移植,但是gttc没有官方docker,所以先把环境搭起来,然后自己创建一个docker镜像安装go语言环境,版本go1.14.10注意需要先在电脑上下载好,再传到服务器,不然没法解压。tar-Cusr/local
GoFly框架中集成Bolt 和badfer两个Go语言嵌入式键值数据库
GoFly开发者
GoFly快速开发框架 数据库 golang 嵌入式键值数据库
本插件集成了Bolt和badfer两个纯Go实现的快速的嵌入式K/V数据库,方便开发时本地存储使用。插件集成Bolt和badfer两个,如果确定使用其中一个,也可以把其中不用的一个删除,不删除也不会有任何影响。插件使用说明1.安装插件到busines后台的开发者工具下的代码仓找到“Go语言嵌入式键值数据库”进行安装即可2.代码说明插件安装到utils\plugin目录中,其中在app\busine
Gin从入门到精通 (一)环境搭建与基础入门
Clown95
Gin gin
一、环境搭建与基础入门1.Gin框架概述Gin是一个用Go语言编写的Web框架,它被设计为高效、轻量、快速和灵活。它具有以下特点:高性能:Gin的性能非常出色,接近于原生GoHTTP处理的速度。路由管理:Gin提供了路由分组、路由参数、通配符等功能,方便进行复杂的路由处理。中间件支持:Gin支持中间件机制,可以在请求处理过程中插入自定义的逻辑。JSON支持:Gin内置了JSON处理,极大地简化了W
使用 pprof 对 Web 应用进行性能调优
YGGP
后端 golang 性能优化
Go性能调优这部分内容参考自q1mi老师的技术博客,原文地址为:https://liwenzhou.com/posts/Go/pprof/。Go性能优化Go语言项目中的性能优化主要在以下几个方面:CPUProfile:报告程序的CPU使用情况,按照一定频率去采集应用程序在CPU和寄存器上的数据;MemoryProfile(HeapProfile):报告程序的内存使用情况;BlockProfilin
Go 语言编译的原理
老赵不会写代码
go语言 golang
Go语言编译的原理Go语言的编译器是一个高效的工具链,能够将Go源代码快速编译为可执行文件或库。理解Go编译的原理有助于开发者更好地优化代码和调试问题。以下是Go编译过程的详细解析。1.编译器架构Go编译器的核心组件包括词法分析器、语法分析器、类型检查器、代码生成器和链接器。这些组件协同工作,将Go源代码转换为机器码。2.编译流程Go编译器的工作流程可以分为以下几个主要阶段:2.1预处理(Prep
深入理解 ABA 问题与退让策略:Go 语言实现与优化
老赵不会写代码
go语言 golang 开发语言 后端
深入理解ABA问题与退让策略:Go语言实现与优化在并发编程中,无锁数据结构(Lock-FreeDataStructures)因其高性能和避免死锁的特性而备受关注。然而,实现无锁算法时,开发者常常会遇到ABA问题和退让策略这两个关键问题。本文将详细解释这两个问题,并结合Go语言提供具体的实现示例。一、ABA问题1.问题定义ABA问题是CAS(Compare-And-Swap)操作中一个经典陷阱。当某
71、Go语言全局初始化利器:sync.Once的深度解析与应用
多多的编程笔记
Go语言开发 golang 开发语言 后端
Go语言开发:sync.Once的使用,实现全局唯一初始化本文将介绍Go语言中sync.Once的使用,以及如何利用它实现全局唯一的初始化。通过阅读本文,您将了解sync.Once的基本概念、应用场景以及一些实用的技巧和案例。1.sync.Once简介在Go语言中,sync.Once是一个同步原语,用于确保某个函数仅被执行一次。这对于初始化操作特别有用,例如全局变量的初始化,因为它们需要在程序启动
【多语言生态篇三】【DeepSeek×Go:高并发推理服务设计】
再见孙悟空_
「2025 DeepSeek技术全景实战」 人工智能 深度学习 DeepSeek DeepSeek GO DeepSeek 高并发 DeepSeek 推理服务 DeepSeek 服务设计
第一章:项目背景与选型考量1.1DeepSeek推理服务的业务挑战日均请求量突破1.2亿次(峰值QPS达38万)典型请求特征:50ms超时限制|10KB输入+2KB响应流量特征:工作日周期性波动(早10点至晚8点负载增长300%)1.2Go语言脱颖而出的五大优势(敲黑板!这里用餐馆厨房做类比更好理解)协程调度器:就像智能厨房调度系统,1个厨师(gopher)可同时照看100口锅(goroutine
Go语言通关指南:零基础玩转高并发编程(第Ⅲ部分)(第6章)-函数编程
双囍菜菜
golang 开发语言 后端
Go语言通关指南:零基础玩转高并发编程(第Ⅲ部分)(第6章)-函数编程文章目录Go语言通关指南:零基础玩转高并发编程(第Ⅲ部分)(第6章)-函数编程第Ⅲ部分核心编程范式第6章函数编程6.1函数声明与参数传递6.1.1函数签名规范6.1.2高性能参数模式6.1.3面试题解析6.2多返回值与错误处理6.2.1错误处理范式演进6.2.2错误包装与追踪6.2.3面试题解析6.3匿名函数与闭包6.3.1闭包
【go语言之http server源码分析】
不爱学习的王小小
golang http java
go语言之http源码分析go原生服务端ListenAndServeservereadRequeststartBackgroundReadfinishRequest在前面的文章go实现tcp升级到http中描述了如何从tcp升级到http。熟悉tcp都是知道,实现tcp需要socket,bind,listen,然后accept。然后对于io来说,有阻塞,非阻塞,多路复用,异步几种模式。对于阻塞和非
MySQL 简介
一小路一
从0-1学程序员-mysql篇 mysql 数据库 后端
1.MySQL简介前言在上个星期的教程中,我们已经学习了Go语言的基础知识,掌握了如何编写简单的程序、实现功能、处理逻辑等。这些基础知识为我们开发项目打下了坚实的基础,但仅仅掌握编程语言的基础并不足以完成一个完整的项目。尤其是在实际开发中,最重要的任务之一就是如何存储和管理数据。无论你是开发一个小型应用,还是构建一个大型的分布式系统,数据存储都是核心部分。通过数据库,我们可以高效地存储、检索、更新
深入浅出微服务基础设施:服务调用
微服务架构
在微服务架构的丰富生态系统中,服务调用是连接各个独立服务的关键机制。有效的服务调用协议不仅能够确保服务间的顺畅通信,还能够提升整体系统的性能和可靠性。本文将深入探讨三种主要的服务调用技术:HTTP、gRPC以及Go语言内置的RPC系统。HTTP/RESTfulAPI因其简单性、通用性和跨语言支持而成为服务调用的首选。它使用标准的HTTP方法来处理资源,易于理解和实现,且有大量的工具和库支持。然而,
深入浅出微服务基础设施:服务调用
微服务架构
在微服务架构的丰富生态系统中,服务调用是连接各个独立服务的关键机制。有效的服务调用协议不仅能够确保服务间的顺畅通信,还能够提升整体系统的性能和可靠性。本文将深入探讨三种主要的服务调用技术:HTTP、gRPC以及Go语言内置的RPC系统。HTTP/RESTfulAPI因其简单性、通用性和跨语言支持而成为服务调用的首选。它使用标准的HTTP方法来处理资源,易于理解和实现,且有大量的工具和库支持。然而,
mongodb3.03开启认证
21jhf
mongodb
下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如下:
(百度上搜到的基本都是老版本的,看到db.addUser的就是,请忽略)
Windows下我做了一个bat文件,用来启动mongodb,命令行如下:
mongod --dbpath db\data --port 27017 --directoryperdb --logp
【Spark103】Task not serializable
bit1129
Serializable
Task not serializable是Spark开发过程最令人头疼的问题之一,这里记录下出现这个问题的两个实例,一个是自己遇到的,另一个是stackoverflow上看到。等有时间了再仔细探究出现Task not serialiazable的各种原因以及出现问题后如何快速定位问题的所在,至少目前阶段碰到此类问题,没有什么章法
1.
package spark.exampl
你所熟知的 LRU(最近最少使用)
dalan_123
java
关于LRU这个名词在很多地方或听说,或使用,接下来看下lru缓存回收的实现
1、大体的想法
a、查询出最近最晚使用的项
b、给最近的使用的项做标记
通过使用链表就可以完成这两个操作,关于最近最少使用的项只需要返回链表的尾部;标记最近使用的项,只需要将该项移除并放置到头部,那么难点就出现 你如何能够快速在链表定位对应的该项?
这时候多
Javascript 跨域
周凡杨
JavaScript jsonp 跨域 cross-domain
 
linux下安装apache服务器
g21121
apache
安装apache
下载windows版本apache,下载地址:http://httpd.apache.org/download.cgi
1.windows下安装apache
Windows下安装apache比较简单,注意选择路径和端口即可,这里就不再赘述了。 2.linux下安装apache:
下载之后上传到linux的相关目录,这里指定为/home/apach
FineReport的JS编辑框和URL地址栏语法简介
老A不折腾
finereport web报表 报表软件 语法总结
JS编辑框:
1.FineReport的js。
作为一款BS产品,browser端的JavaScript是必不可少的。
FineReport中的js是已经调用了finereport.js的。
大家知道,预览报表时,报表servlet会将cpt模板转为html,在这个html的head头部中会引入FineReport的js,这个finereport.js中包含了许多内置的fun
根据STATUS信息对MySQL进行优化
墙头上一根草
status
mysql 查看当前正在执行的操作,即正在执行的sql语句的方法为:
show processlist 命令
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一、慢查询mysql> show variab
我的spring学习笔记7-Spring的Bean配置文件给Bean定义别名
aijuans
Spring 3
本文介绍如何给Spring的Bean配置文件的Bean定义别名?
原始的
<bean id="business" class="onlyfun.caterpillar.device.Business">
<property name="writer">
<ref b
高性能mysql 之 性能剖析
annan211
性能 mysql mysql 性能剖析 剖析
1 定义性能优化
mysql服务器性能,此处定义为 响应时间。
在解释性能优化之前,先来消除一个误解,很多人认为,性能优化就是降低cpu的利用率或者减少对资源的使用。
这是一个陷阱。
资源时用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度,保持cpu忙绿,这是必要的。很多时候发现
编译进了新版本的InnoDB之后,cpu利用率上升的很厉害,这并不
主外键和索引唯一性约束
百合不是茶
索引 唯一性约束 主外键约束 联机删除
目标;第一步;创建两张表 用户表和文章表
第二步;发表文章
1,建表;
---用户表 BlogUsers
--userID唯一的
--userName
--pwd
--sex
create
线程的调度
bijian1013
java 多线程 thread 线程的调度 java多线程
1. Java提供一个线程调度程序来监控程序中启动后进入可运行状态的所有线程。线程调度程序按照线程的优先级决定应调度哪些线程来执行。
2. 多数线程的调度是抢占式的(即我想中断程序运行就中断,不需要和将被中断的程序协商)
a) 
查看日志常用命令
bijian1013
linux 命令 unix
一.日志查找方法,可以用通配符查某台主机上的所有服务器grep "关键字" /wls/applogs/custom-*/error.log
二.查看日志常用命令1.grep '关键字' error.log:在error.log中搜索'关键字'2.grep -C10 '关键字' error.log:显示关键字前后10行记录3.grep '关键字' error.l
【持久化框架MyBatis3一】MyBatis版HelloWorld
bit1129
helloworld
MyBatis这个系列的文章,主要参考《Java Persistence with MyBatis 3》。
样例数据
本文以MySQL数据库为例,建立一个STUDENTS表,插入两条数据,然后进行单表的增删改查
CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
【Hadoop十五】Hadoop Counter
bit1129
hadoop
1. 只有Map任务的Map Reduce Job
File System Counters
FILE: Number of bytes read=3629530
FILE: Number of bytes written=98312
FILE: Number of read operations=0
FILE: Number of lar
解决Tomcat数据连接池无法释放
ronin47
tomcat 连接池 优化
近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上 有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会 再次出现无法登录的情况。
今天上午,开发人员小毛又找到我,要我协助将这个问题根治一下,拖太久用户难保不投诉。
简单分析了一
java-75-二叉树两结点的最低共同父结点
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import ljn.help.*;
public class BTreeLowestParentOfTwoNodes {
public static void main(String[] args) {
/*
* node data is stored in
行业垂直搜索引擎网页抓取项目
carlwu
Lucene Nutch Heritrix Solr
公司有一个搜索引擎项目,希望各路高人有空来帮忙指导,谢谢!
这是详细需求:
(1) 通过提供的网站地址(大概100-200个网站),网页抓取程序能不断抓取网页和其它类型的文件(如Excel、PDF、Word、ppt及zip类型),并且程序能够根据事先提供的规则,过滤掉不相干的下载内容。
(2) 程序能够搜索这些抓取的内容,并能对这些抓取文件按照油田名进行分类,然后放到服务器不同的目录中。
[通讯与服务]在总带宽资源没有大幅增加之前,不适宜大幅度降低资费
comsci
资源
降低通讯服务资费,就意味着有更多的用户进入,就意味着通讯服务提供商要接待和服务更多的用户,在总体运维成本没有由于技术升级而大幅下降的情况下,这种降低资费的行为将导致每个用户的平均带宽不断下降,而享受到的服务质量也在下降,这对用户和服务商都是不利的。。。。。。。。
&nbs
Java时区转换及时间格式
Cwind
java
本文介绍Java API 中 Date, Calendar, TimeZone和DateFormat的使用,以及不同时区时间相互转化的方法和原理。
问题描述:
向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于东八区(北京时间,GMT+8:00),而身处东四区的用户想要查询当天的销售记录。则需把东四区的“今天”这个时间范围转换为服务器所在时区的时间范围。
readonly,只读,不可用
dashuaifu
js jsp disable readOnly readOnly
readOnly 和 readonly 不同,在做js开发时一定要注意函数大小写和jsp黄线的警告!!!我就经历过这么一件事:
使用readOnly在某些浏览器或同一浏览器不同版本有的可以实现“只读”功能,有的就不行,而且函数readOnly有黄线警告!!!就这样被折磨了不短时间!!!(期间使用过disable函数,但是发现disable函数之后后台接收不到前台的的数据!!!)
LABjs、RequireJS、SeaJS 介绍
dcj3sjt126com
js Web
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更
[应用结构]入口脚本
dcj3sjt126com
PHP yii2
入口脚本
入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。终端用户的请求通过入口脚本实例化应用并将将请求转发到应用。
Web 应用的入口脚本必须放在终端用户能够访问的目录下,通常命名为 index.php,也可以使用 Web 服务器能定位到的其他名称。
控制台应用的入口脚本一般在应用根目录下命名为 yii(后缀为.php),该文
haoop shell命令
eksliang
hadoop hadoop shell
cat
chgrp
chmod
chown
copyFromLocal
copyToLocal
cp
du
dus
expunge
get
getmerge
ls
lsr
mkdir
movefromLocal
mv
put
rm
rmr
setrep
stat
tail
test
text
MultiStateView不同的状态下显示不同的界面
gundumw100
android
只要将指定的view放在该控件里面,可以该view在不同的状态下显示不同的界面,这对ListView很有用,比如加载界面,空白界面,错误界面。而且这些见面由你指定布局,非常灵活。
PS:ListView虽然可以设置一个EmptyView,但使用起来不方便,不灵活,有点累赘。
<com.kennyc.view.MultiStateView xmlns:android=&qu
jQuery实现页面内锚点平滑跳转
ini
JavaScript html jquery html5 css
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/37.htmHTML文件代码:
&
kafka offset迁移
kane_xie
kafka
在早前的kafka版本中(0.8.0),offset是被存储在zookeeper中的。
到当前版本(0.8.2)为止,kafka同时支持offset存储在zookeeper和offset manager(broker)中。
从官方的说明来看,未来offset的zookeeper存储将会被弃用。因此现有的基于kafka的项目如果今后计划保持更新的话,可以考虑在合适
android > 搭建 cordova 环境
mft8899
android
1 , 安装 node.js
http://nodejs.org
node -v 查看版本
2, 安装 npm
可以先从 https://github.com/isaacs/npm/tags 下载 源码 解压到
java封装的比较器,比较是否全相同,获取不同字段名字
qifeifei
非常实用的java比较器,贴上代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
i
记录一些函数用法
.Aky.
位运算 PHP 数据库 函数 IP
高手们照旧忽略。
想弄个全天朝IP段数据库,找了个今天最新更新的国内所有运营商IP段,copy到文件,用文件函数,字符串函数把玩下。分割出startIp和endIp这样格式写入.txt文件,直接用phpmyadmin导入.csv文件的形式导入。(生命在于折腾,也许你们觉得我傻X,直接下载人家弄好的导入不就可以,做自己的菜鸟,让别人去说吧)
当然用到了ip2long()函数把字符串转为整型数
sublime text 3 rust
wudixiaotie
Sublime Text
1.sublime text 3 => install package => Rust
2.cd ~/.config/sublime-text-3/Packages
3.mkdir rust
4.git clone https://github.com/sp0/rust-style
5.cd rust-style
6.cargo build --release
7.ctrl