chesian


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索
close

Neural-Networks-and-Deep-Learning 站点资源

发表于 2016 年 11 月 12 日   |   分类于 Deep-Learning , Neural-Network   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/11/12/Neural-Networks-and-Deep-Learning/ )

http://neuralnetworksanddeeplearning.com/

关于作者
http://michaelnielsen.org/

Reference

http://en.wikipedia.org/wiki/Frank_Rosenblatt
感知器在 20 世纪五、六⼗年代由科学家 Frank Rosenblatt 发明,其受到 Warren McCulloch 和 Walter Pitts 早期的⼯作的影响。

http://en.wikipedia.org/wiki/Recurrent_neural_network

http://yann.lecun.com/exdb/mnist/
MNIST 数据集

http://mathoverflow.net/questions/25983/intuitive-crutches-for-higher-dimensional-thinking
专业的数学家如何思考⾼维空间的讨论

http://numpy.org/
Numpy 的 Python 库,⽤来做快速线性代数

http://www.deeplearning.net/tutorial/gettingstarted.html
MNIST 数据集的特殊格式的数据

http://scikit-learn.org/stable/
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
https://github.com/mnielsen/neural-networks-and-deep-learning/blob/master/src/mnist_svm.py
使⽤ scikit-learn Python 程序库,它提供了⼀个简单的 Python 接⼝,包装了⼀个⽤于 SVM 的快速的,称为 LIBSVM 的 C 库。

http://peekaboo-vision.blogspot.ca/
http://peekaboo-vision.blogspot.de/2010/09/mnist-for-ever.html
Andreas Mueller 的博客。Mueller 展⽰了通过⼀些优化SVM 参数的⼯作

http://www.matthewzeiler.com/pubs/icml2013/icml2013.pdf
Regularization of Neural Networks using DropConnect

http://www.nature.com/nature/journal/v323/n6088/pdf/323533a0.pdf
反向传播算法最初在 1970 年代被提及,但是⼈们直到 David Rumelhart、Geoffrey Hinton 和Ronald Williams 的著名的 1986 年的论⽂中才认识到这个算法的重要性。

二元熵。 链式法则
http://en.wikipedia.org/wiki/Binary_entropy_function

https://github.com/mnielsen/neural-networks-and-deep-learning/blob/master/src/network2.py
使⽤交叉熵来对 MNIST 数字进⾏分类

http://books.google.ca/books?id=VWq5GG6ycxMC
交叉熵是“不确定性”的一种度量 可以阅读 Cover and Thomas 的第五章涉及 Kraft 不等式的有关信息论的内容。

http://www.nature.com/nature/journal/v427/n6972/full/427297a.html
http://www.johndcook.com/blog/2011/06/21/how-to-fit-an-elephant/
过度拟合 这个引⽤的故事来⾃⼀篇 Freeman Dyson 所写的引⼈⼊胜的⽂章。他是提出这个有瑕疵的模型的⼈之⼀。⼀个关于四个参数模拟⼤象的例⼦可以在这⾥ 找到。

https://www.aip.org/history-programs/niels-bohr-library/oral-histories/5020-4
http://en.wikipedia.org/wiki/Problem_of_induction
http://www.gutenberg.org/ebooks/9662
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=585893
These issues go back to the problem of induction, famously discussed by the Scottish philosopher David Hume in
”An Enquiry Concerning Human Understanding” (1748). The problem of induction has been given a modern machinelearning form in the no-free lunch theorem (link) of David Wolpert and William Macready (1997).

http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
梯度下降学习的动态有⼀种⾃规范化的效应。
13 In Gradient-Based Learning Applied to Document Recognition, by Yann LeCun, Léon Bottou, Yoshua Bengio, andPatrick Haffner (1998).

https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
14 ImageNetClassificationwithDeepConvolutionalNeuralNetworks,byAlexKrizhevsky,IlyaSutskever,andGeoffrey
Hinton (2012).
“因为神经元不能依赖其他神经元特定的存在,这个技术其实减少了复杂的互适应的神经元。所以,强制要学习那些在
神经元的不同随机⼦集中更加健壮的特征。 ”

http://arxiv.org/pdf/1207.0580.pdf
15 Improving neural networks by preventing co-adaptation of feature detectors by Geoffrey Hinton, Nitish Srivastava,Alex Krizhevsky, Ilya Sutskever
弃权技术的真正衡量是它已经在提升神经⽹络性能上应⽤得相当成功。原始论⽂ 15 介绍了将其应⽤于很多不同任务的技术。

http://dx.doi.org/10.1109/ICDAR.2003.1227801
7 Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis, by Patrice Simard, Dave
Steinkraus, and John Platt (2003)
这⽚论⽂中,作者在 MNIST 上使⽤了⼏个的这种想法的变化⽅式。其中⼀种他们考虑的⽹络结构其实和我们已经使⽤过的类似——⼀个拥有 800 个隐藏元的前馈神经⽹络,使⽤了交叉熵代价函数。

http://scikit-learn.org/stable/
使⽤ scikit-learn 库提供的 SVM 替换神经⽹络

http://dx.doi.org/10.3115/1073012.1073017
对“算法 A 是不是要⽐算法 B 好? ”正确的反应应该是“你在使⽤什么训练集合? ”
显著的例⼦参⻅ Scaling to very very large corpora for natural language disambiguation, by Michele Banko and
Eric Brill (2001).

http://arxiv.org/pdf/1206.5533v2.pdf
权重初始化⽅法 看看在 2012 年的 Yoshua Bengio 的论⽂ 22 的14 和 15 ⻚,以及相关的参考⽂献
Practical Recommendations for Gradient-Based Training of Deep Architectures, by Yoshua Bengio (2012)

http://papers.nips.cc/paper/4522-practical-bayesian-optimization-of-machine-learning-algorithms.pdf
https://github.com/jaberg/hyperopt
⽹格搜索的成就和限制(易于实现的变体)在 James Bergstra 和 Yoshua Bengio 2012 年的 论⽂中已经给出了综述。很多更加精细的⽅法也被⼤家提出来了。我这⾥不会给出介绍,但是想指出 2012 年使⽤⻉叶斯观点⾃动优化超参数的论⽂。代码可以获得,也已经被其他的研究⼈员使⽤了。

http://en.wikipedia.org/wiki/Limited-memory_BFGS
优化代价函数的⽅法:当你越来越深⼊了解神经⽹络时,值得去尝试其他的优化技术,理解他们⼯作的原理,优势劣势,以及在实践中如何应⽤。前⾯我提到的⼀篇论⽂ 25 ,介绍并对⽐了这些技术,包含共轭梯度下降和 BFGS ⽅法(也可以看看 limited memory BFGS,L-BFGS。另⼀种近期效果很不错技术 26 是 Nesterov 的加速梯度技术,这个技术对 momentum 技术进⾏了改进。
http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
Efficient BackProp, by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller (1998).
http://www.cs.toronto.edu/~hinton/absps/momentum.pdf
例如, 看看 On the importance of initialization and momentum in deep learning, by Ilya Sutskever, James Martens,
George Dahl, and Geoffrey Hinton (2012).

http://www.reddit.com/r/MachineLearning/comments/25lnbt/ama_yann_lecun/chivdv7
你怎么看那些全部由实验效果⽀撑(⽽⾮数学保证)的使⽤和研究机器学习技术呢?同样,在哪些场景中,你已经注意到这些技术失效了?

https://zh.wikipedia.org/wiki/哈恩-巴拿赫定理
http://www.dartmouth.edu/~gvc/Cybenko_MCSS.pdf
http://www.sciencedirect.com/science/article/pii/0893608089900208
普遍性定理
1 Approximation by superpositions of a sigmoidal function, by George Cybenko (1989). The result was very much
in the air at the time, and several groups proved closely related results. Cybenko’s paper contains a useful discussionof much of that work. Another important early paper is Multilayer feedforward networks are universal approximators,by Kurt Hornik, Maxwell Stinchcombe, and Halbert White (1989). This paper uses the Stone-Weierstrass theorem toarrive at similar results

http://arxiv.org/pdf/1312.6098.pdf
http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf
正如线路的⽰例中看到的那样,存在着理论上的研究结果告诉我们深度⽹络在本质上⽐浅层⽹络更加强⼤
1 对某些问题和⽹络结构,Razvan Pascanu, Guido Montúfar, and Yoshua Bengio 在 2014 年的这篇⽂章 On the
number of response regions of deep feed forward networks with piece-wise linear activations 给出了证明。更加详细
的讨论在 Yoshua Bengio 2009 年的著作 Learning deep architectures for AI 的第2部分。

https://github.com/mnielsen/neural-networks-and-deep-learning/archive/master.zip
单⼀隐藏层的神经⽹络⽰例 消失的梯度问题

http://en.wikipedia.org/wiki/Gabor_filter Gabor 滤波器
http://arxiv.org/abs/1311.2901
现在有许多关于通过卷积⽹络来更好理解特征的⼯作成果。如果你感兴趣,我建议从 Matthew Zeiler 和 Rob Fergus 的
(2013)论⽂ Visualizing and Understanding Convolutional Networks 开始。

http://deeplearning.net/software/theano/
Theano 的机器学习库

http://aws.amazon.com/ec2/instance-types/
Amazon Web Services EC2 G2 实例类型你手机上的系统没有可用·的 GPU

http://dx.doi.org/10.1109/ICDAR.2003.1227801
Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis, by Patrice Simard, Dave
Steinkraus, and John Platt (2003).
在 2003 年,Simard,Steinkraus 和Platt 19 使⽤⼀个神经⽹络改进了他们的 MNIST 性能,达到了 99.6%,这个⽹络以其它⽅式和我们的⾮常相似,使⽤两个卷积–混合层,跟着⼀个具有 100 个神经元的隐藏的全连接层。

http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html
仍然有可能在 MNIST 上提⾼性能。Rodrigo Benenson 汇编了⼀份信息汇总⻚⾯,显⽰这⼏年的进展,提供了论⽂的链接。

http://arxiv.org/abs/1003.0358
近期成果的大部分内容、它是⼀篇 Cireșan、Meier、Gambardella、和 Schmidhuber 所著的 2010 年论⽂ 20 。我喜欢这篇论⽂的地⽅是它是如此简单。其中的⽹络是⼀个许多层的神经⽹络,仅使⽤全连接层(没有卷积层)
Deep, Big, Simple Neural Nets Excel on Handwritten Digit Recognition, by Dan Claudiu Cireșan, Ueli Meier, Luca
Maria Gambardella, and Jürgen Schmidhuber (2010).

http://www.image-net.org/

2012 LRMD 论⽂:让我从⼀篇源⾃斯坦福和⾕歌的研究⼩组的 2012 年论⽂ 22 开始。我把这篇论⽂称为 LRMD,取⾃前四位作者的姓。LRMD 使⽤⼀个神经⽹络来分类 ImageNet 的图像,⼀个⾮常具有挑战性的图像识别问题。

http://www.image-net.org/synset?wnid=n03489162
明显是⼀个⽐ MNIST 更有挑战性的图像识别任务

http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
2012 KSH 论⽂: LRMD 的成果被⼀篇 Krizhevsky, Sutskever 和 Hinton (KSH) 24 的 2012
年论⽂追随。KSH 训练和测试⼀个深度卷积神经⽹络,它使⽤ ImageNet 数据的⼀个有限的⼦集
24 ImageNet classification with deep convolutional neural networks, by Alex Krizhevsky, Ilya Sutskever, and Geoffrey E. Hinton (2012).

https://code.google.com/p/cuda-convnet/
Alex Krizhevsky 的 cuda-convnet(和接替版本) ,它包含有实现这许多思想的
代码。⼀个基于 Theano 的实现 26 ,代码可以在这⾥得到。

http://caffe.berkeleyvision.org/model_zoo.html
Caffe 神经⽹络框架也包含⼀个 KSH ⽹络的版本,详细参⻅ Model Zoo。
、
、http://karpathy.github.io/2014/09/02/what-i-learned-from-competing-against-a-convnet-on-imagenet/
为了做这件事,他们构建了⼀个系统让⼈类对 ILSVRC 图像进⾏分类。其作者之⼀ Andrej Karpathy 在⼀篇博
⽂中解释道,

http://arxiv.org/abs/1412.2302
26 Theano-based large-scale visual recognition with multiple GPUs, by Weiguang Ding, Ruoyan Wang, Fei Mao, andGraham Taylor (2014).

http://arxiv.org/abs/1409.4842
27 Going deeper with convolutions, by Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed,
Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich (2014).

http://arxiv.org/abs/1409.0575
28 ImageNet large scale visual recognition challenge, by Olga Russakovsky, Jia Deng, Hao Su, Jonathan Krause,
Sanjeev Satheesh, Sean Ma, Zhiheng Huang, Andrej Karpathy, Aditya Khosla, Michael Bernstein, Alexander C. Berg,and Li Fei-Fei (2014).

http://arxiv.org/abs/1410.4615
RNN 被⽤来将传统的算法思想,⽐如说 Turing 机或者编程语⾔,和神经⽹络进⾏联系上。这
篇 2014 年的论⽂提出了⼀种 RNN 可以以 python 程序的字符级表达作为输⼊,⽤这个表达来预
测输出。简单说,⽹络通过学习来理解某些 python 的程序

http://arxiv.org/abs/1410.5401
第⼆篇论⽂同样是 2014 年的,使
⽤ RNN 来设计⼀种称之为“神经 Turing 机”的模型。这是⼀种通⽤机器整个结构可以使⽤梯度
下降来训练。作者训练 NTM 来推断对⼀些简单问题的算法,⽐如说排序和复制

http://research.google.com/pubs/VincentVanhoucke.html
一个基于深度⽹络的系统已经⽤在了 Google 的 Android 操作系统中(详⻅ Vincent
Vanhoucke 的 2012-2015 论⽂) 。

http://dx.doi.org/10.1162/neco.1997.9.8.1735
一个称为长短期记忆(long short-term memory)的单元进⼊ RNN 中。LSTM 最早是由
Hochreiter和Schmidhuber在1997年提出, 就是为了解决这个不稳定梯度的问题。 LSTM让RNN
训练变得相当简单, 很多近期的论⽂ (包括我在上⾯给出的那些) 都是⽤了LSTM或者相关的想法

http://www.cs.toronto.edu/~hinton/absps/fastnc.pdf
http://www.sciencemag.org/content/313/5786/504.short
深度信念⽹络,生成式模型和 Boltzmann 机:
参⻅ Geoffrey Hinton, Simon Osindero 和 Yee-Whye Teh 在 2006 年的 A fast learning algorithm for deep belief
nets, 及 Geoffrey H

http://www.scholarpedia.org/article/Deep_belief_networks
DBN 综述

http://www.cs.toronto.edu/~hinton/absps/guideTR.pdf
包含了很多关于 DBN核⼼组件的受限 Boltzmann 机的有价值的信息。

热⻔的领域包含使⽤神经⽹络来做
http://machinelearning.org/archive/icml2008/papers/391.pdf
自然语言处理 natural languageprocessing(see also this informative review paper)、
http://papers.nips.cc/paper/5346-information-based-learning-by-agents-in-unbounded-state-spaces
机器翻译 machine translation,
http://yann.lecun.com/exdb/publis/pdf/humphrey-jiis-13.pdf
音乐信息学 music informatics。

http://www.cs.toronto.edu/~vmnih/docs/dqn.pdf
强化学习的技术来学习玩电⼦游戏 play video games well

http://en.wikipedia.org/wiki/Conway%27s_law Conway 法则

Windows 安装最新版 Mysql5.7

发表于 2016 年 10 月 23 日   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/10/23/windows-intall-mysql5-7/ )

Windows 安装最新版 Mysql5.7

Step 1: 下载mysql

下载安装程序包,可到MySQL官方网站http://dev.mysql.com/downloads/下载,选择MySQL Community Server下载 如图

image

选择相对应的位数,我这里是64-bit的,然后单击右边的download, 同时登录,但下方有免登录下载链接,点击下载。

Step 2: 解压文件夹

我这里是解压到C:\workspace, 你可以解压到任何地方。设置环境变量,将mysql的安装路径添加到path下
image

Step 3: data文件夹

因为mysql5.7 以后的版本解压后没有data文件夹, 需要自己设定。有两种方法
1、把mysql5.6 以前的版本解压后的data目录复制到 mysql5.7 的安装路径下,这样做的比较麻烦,如果没有mysql5.6的版本,还要重新下载。
2、通过命令行来初始化 data 目录, 在 cmd 命令行下输入

mysqld --initialize-insecure

Step 4: mysql服务
把mysql 添加到windows 系统服务中
1、用管理员身份打开cmd 命令行,在 cmd 命令行下输入mysqld install mysql,
2、通过命令行 启动mysql 服务 输入 net start mysql.

Step 5: 启动mysql

在 cmd 命令行下输入 mysql -u root, 初始密码为空,直接按Enter回车,进入mysql命令

image

PS:我的安装过程

1、解压后直接 启动mysql.

C:\workspace\mysql-5.7.15-winx64\bin>mysql -u root
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

原因 :mysql 服务未启动

2、安装mysql 服务到window系统服务

C:\workspace\mysql-5.7.15-winx64\bin>mysqld install mysql
Install/Remove of the Service Denied!

3、启动mysql 服务

C:\Users\chen>net start mysql
发生系统错误 5。
拒绝访问。

2、3原因 :权限不够,要切换在windows管理员的权限下 输入命令

4、C:\Users\chen>net start mysql

image
image

输入mysqld -console 输出分析mysql 下没有data文件夹

5、输入 mysqld –inititailize -insecure

image
image

有data文件夹之后还是无法启动mysql服务,打开看 chen-PC.err

image

原因:发现 – inititalize 命令不存在?然后发现 命令敲错了 initialize 多了一个t,而在命令行中没报错,只写在err 里面。

解决:然后重新把 data 文件夹删掉, 命令行输入 mysqld – initialize -insecure

image
image
image

关于编码问题

1、在mysql 安装目录下的my.ini 文件中 分别添加下面设置

image

Scrapy五大组件介绍

发表于 2016 年 10 月 17 日   |   分类于 爬虫 , Scrapy   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/10/17/scrapy-five-module/ )

Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我们分别介绍各个组件的作用。

调度器

调度器,说白了可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址(不做无用功)。用户可以跟据自己的需求定制调度器。

下载器

下载器,是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。

爬虫

爬虫,是用户最关心的部份。用户定制自己的爬虫,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。

实体管道

实体管道,用于处理爬虫提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。

Scrapy引擎

Scrapy引擎是整个框架的核心。它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。

Scrapy运行流程

  1. 首先,引擎从调度器中取出一个链接(URL)用于接下来的抓取
  2. 引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)
  3. 然后,爬虫解析Response
  4. 若是解析出实体(Item),则交给实体管道进行进一步的处理。
  5. 若是解析出的是链接(URL),则把URL交给Scheduler等待抓取

SVN提交更新的一些准则

发表于 2016 年 09 月 22 日   |   分类于 开发工具 , SVN   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/09/22/svn-rule/ )

SVN提交更新的一个准则

负责而谨慎地提交自己的代码

SVN更新的原则是要随时更新,随时提交。当完成了一个小功能,能够通过编译并且并且自己测试之后,谨慎地提交。
如果提交过程中产生了冲突,则需要同之前的开发人员联系,两个人一起协商解决冲突,解决冲突之后,需要两人一起测试保证解决冲突之后,程序不会影响其他功能。
如果提交过程中产生了更新,则也是需要重新编译并且完成自己的一些必要测试,再进行提交。

保持原子性的提交

每次提交的间歇尽可能地短,以一个小时,两个小时的开发工作为宜。如在更改UI界面的时候,可以每完成一个UI界面的修改或者设计,就提交一次。在开发功能模块的时候,可以每完成一个小细节功能的测试,就提交一次,在修改bug的时候,每修改掉一个bug并且确认修改了这个bug,也就提交一次。我们提倡多提交,也就能多为代码添加上保险。

不要提交自动生成的文件

Visual Studio在生成过程中会产生很多自动文件,如.suo等配置文件,Debug,Release,Obj等编译文件,以及其他的一些自动生成,同编译代码无关的文件,这些文件在提交的时候不应该签入,如果不小心签入了,需要使用Delete命令从仓库中删除。

不要提交不能通过编译的代码
代码在提交之前,首先要确认自己能够在本地编译。如果在代码中使用了第三方类库,要考虑到项目组成员中有些成员可能没有安装相应的第三方类库或者没有放入GAC(针对.Net Framework)中,项目经理在准备项目工作区域的时候,需要考虑到这样的情况,确保开发小组成员在签出代码之后能够在统一的环境中进行编译。

不要提交自己不明白的代码

代码在提交入SVN之后,你的代码将被项目成员所分享。如果提交了你不明白的代码,你看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。因此在引入任何第三方代码之前,确保你对这个代码有一个很清晰的了解。

提前宣布自己的工作计划

在自己准备开始进行某项功能的修改之前,先给工作小组的成员谈谈自己的修改计划,让大家都能了解你的思想,了解你即将对软件作出的修改,这样能尽可能的减少在开发过程中可能出现的冲突,提高开发效率。同时你也能够在和成员的交流中发现自己之前设计的不足,完善你的设计。

对提交的信息采用明晰的标注

+) 表示增加了功能
*) 表示对某些功能进行了更改
-) 表示删除了文件,或者对某些功能进行了裁剪,删除,屏蔽。
b) 表示修正了具体的某个bug

《把时间当作朋友》 总结

发表于 2016 年 08 月 25 日   |   分类于 Life , Book   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/08/25/time-as-friend/ )

把时间当作朋友


前言

  • 绝大多数学习上的成功根本与智商没有任何关系,所有的失败都与且只与时间限制有关

  • 生命的本质以及乐趣就在于“Who knows what happens next?”

  • 大多的努力其实不过是简单而又貌似枯燥的重复。
    很多人害怕思考,常常说,“想那么多干嘛,多累啊?”然后用天下最累的方式生活而不
    自知。大哲学家罗素曾观察到这个现象,并为之奇怪,慨叹道, “很多人宁愿死也不愿思考 。

  • 我竟然没有意识到管理的焦点根本就不应该是时间,而应该是我自己!


  • 写作,只有想清楚了,才可能写清楚。更喜欢讲思维方法
  1. 死背单词,文章?

    • 既勤奋又懒惰”的怪异现象来自于他们对“时间压力”感受。“没有时间了”,或者“时间不够了”的感受和恐惧,使得他们超乎寻常地勤奋,哪怕是虚假地“勤奋”,恨不能废寝忘食。
    • 巨大的压力,极度的恐惧,使患者的身上集结并综合了一切的矛盾:他们既勤奋又懒惰,既聪明又愚蠢,既勇敢又懦弱,既满怀希望又时时刻刻面临绝望,既充满自信又随时随地体会卑微
  2. 老师,这个方法真的有用么?

    • 不管什么方法,都要通过实践才能获得效果
    • 实践需要花费时间,而每个人的时间都是因有限而宝贵
    • 你怎么还在浪费时间想这样没用的问题呢?要是你早就开始实践的话,现在不就能知道那方法是否真的有用了么
    • 从某种意义上来看,居然是彻头彻尾地出自于理性,你必须告诉我,你的方法到底是否真的有用?如果答案不是确定的 ,我才不会采取行动呢。几乎所有拒绝学习的人其实都正是因为他们觉得自己的这个推理,准确无误,才那么理直气壮地选择拒绝学习。
  3. 人与人之间怎么会有那么大的差异呢?

    • 人与人之间的差异 —— 除了看得见的相貌、身材、出身、财富之外,还有看不见摸不着的心智力量差别

    • 因“不知道学习有什么用”而拒绝学习的人,会在接下来的日子里虚度光阴把时间当作朋友——运用心智获得解放无数,哪怕他们天天“科学地”制定计划,编制“任务列表”。而与之相反,因“不知道学习有什么用”而选择努力学习的人,每时每刻都充满了收获,并且会在将来的某一天获得更多的“意外”收获,哪怕他们可能显得“漫无目的”——真的就是天壤之别。

  4. 上司很愚蠢?

    • 既然上司那么愚蠢,他们又为什么要用自己宝贵的生命中的大部分时间为那个愚蠢的上司打工呢?那些少数能够提出建设性意见的人,是不会抱怨“上司很愚蠢”的,因为,他们要么想办法帮助上司解决问题,要么就在爱莫能助的时候选择离开公司,自行其是

    • 大多数情况下,一个人如果不做事的话,是不会暴露自己的缺点的,因为人只有在做事的时候才会暴露缺点。这就是为什么大多数人并不自知的重要原因

  5. 兴趣真的那么重要么?

    • 对目前的专业没兴趣,不客气地说,99%的情况下并非如此。首先,这些人并不是对正在做的事情没有兴趣,而是没能力把目前正在做的事情做好。
    • 但是不管怎样,一定要问清楚自己这个问题: 我不喜欢做这件事情有没有可能仅仅是因为这件事儿我并没有做好?要是因为自己没有做好而不喜欢,就要分辨另外一件事儿了:做好这件事情究竟对自己有没有什么具体的意义呢?如果有,那就要努力做,直到做好为止——没有其他选择。
    • 往往并不是有兴趣才能做好,而是做好了才有兴趣
  6. 学习方法真的至关重要么?

    • 只有聪明的人才去关心方法,这没什么不对。然而,学生总是过分关心自己正在用的方法是不是正确。仅仅正确还不够,还要考虑这方法是不是足够巧妙。与其不停地找更好的方法,还不如马上开始行动,省得虚度更多的时间。
  7. 盲打究竟是否值得学会?

    • 只有拥有了无以伦比的打字速度才知道打字快有多大的好处
    • 拒绝去练习盲打,只不过是出于懒惰而拒绝学习和练习
    • 学会了盲打,那么,我可以多出多少读书笔记,积累多少文字
事实上,没有什么要比发现、培养、呵护、调整自己的心智的力量更重要的事情了,重要的是,他每天都在反省

  1. 控制自己的大脑

    • 不再让自己成为自己的大脑的奴隶,而是选择翻身做主人.
    • 你的大脑非常活跃,并且你的注意力最容易接受它的指令;所以,甚至在你自己都没有意识到的情况把时间当作朋友——运用心智获得解放下,它在不停地操控你的注意力。
  2. 控制自己的情绪

    • 一个人遗忘痛苦的能力特别强的一个具体表现就是,这个人会很轻易地原谅自己。好了伤疤就忘了疼,记住痛苦
  3. 控制天性

    • 希望自己的欲望马上获得满足(instantgratification)是大多数人的天性,野心是永远是少数人的天性。
    • 在工作和学习上,坚决不要放纵。
    • 在其他方面稍微放纵一下都是非常有必要的。偶尔大醉一场没什么不好。偶尔连续打上两天两夜的牌不仅有助于身心健康也是一种很好的社交活动
    • “推迟满足感”是心智成熟的人必备的能力

李敖的事件记录,往往只能记录事件的名称,是一种基于结果的记录;而柳比歇夫的 “事件 - 时间日志”却是一种基于过程的记录。

人或多或少是经验主义的动物,我们一生中半途而废的经验太多了,乃至于想要放弃“半途而废”要比“坚持到底最终成功”难太多了——大多数人连一次“坚持到底最终成功”的经验都没有。

与懒惰抗争、停止遗忘、坚持改变的工具,就是纸笔。

开始记录时间开销

第一组练习

(一)认真回忆一下并记录昨天你都做了什么。逐条记录下来,前面写上标号,后面标注出做那件事情所花费的时间。

(二)认真回忆一下并记录前天你都做了什么。同样逐条记录下来。

(三)认真回忆一下并记录大前天你都做了什么。同样逐条记录下来。

第二组练习(这组练习只需要你用一个下午就够了)

(一)认真回忆一下并记录上一周你都做了什么。

(二)认真回忆一下并记录上一个月你都做了什么。

(三)认真回忆一下并记录上一个季度你都做了什么。

(四)认真回忆一下并记录过去的一年里你都做了什么。

第三组练习

(一)用一个星期时间,每天晚上回忆一下并记录当天你都做了什么。

(二)用一个星期时间,每天随时记录你刚刚做完的事情花费了多少时间。


每天制作你的时间预算

花费15至30分钟仔细制作你当天的时间预算

最直接的方法就是制作一个列表,把你今天需要做的事情罗列出来。

遇到的第一个问题是发现, 任务太多,无法全部完成。于是你只好进行选择。 事实上,生活就是选择

判断一个任务是否“真的重要”,其实只需要一个标准:就是看这个任务的完成是否对你的目标(无论是长期,还是短期)达成是否确实有益。

每个人都或多或少,或清楚明了或含混不清地有自己的目标——不管是什么所谓的“理想”或者“痴心妄想”。那你现在就开始参照着那个你自己的哪怕是“不切实际”的目标作为标准来判断吧


(一)大多数情况下确实没必要制作列表。 学习&工作

(二)最好的列表记录工具是纸和笔。

(三)列表没必要工整。

(四)列表一定要随手可及。

(五)最重要的任务永远只有一个。

(六)制作专门的下一阶段任务列表。(更改任务列表)

(七)给你的每个任务制定一个核对列表。

(八)列表一旦开始执行就一定要执行到底

证明我的目标现实可行的方法比较简单:

1) 已经有人做到了;

2) 我与那人没有太大的差距。

  • 目标是不是确实不可行,往往只有开始行动了之后, 才可以做出正确的判断。

  • 半途而废不仅并不意味着失败,还意味着该决策者是无比理智的。

  • 时间的浪费,往往是1)目标不现实或者目前暂时尚不可行;2)为了达到目标而制定的实施策略有误

长期计划是需要通过实践才能习得的能力

每个计划的期限从一个星期 到一个月 到 一个季度 到一年

没必要做计划的原因有两个:除了前面提到过的“大多数计划其实非常简单”之外,另外一个是“初始状态下,甚至连基本的认知都没有的时候,我们往往实际上并没有能力去制定合理有效的计划”。

如果你想改变你自己,或者你自己目前并不令人满意的处境,那就一切从简——找一个你觉得该给你带来改变的行动,然后去做就是了。


获得知识的基本途径

  • 所有的人获取知识的最为基础的手段就是通过体验。经验主义的局限
  • 再高级一点的获取知识的手段,就是试错(Trial d and error) 。
  • 另外一个聪明一点的,也重要得多的获取知识的方式是通过观察。
  • 阅读就成了获取知识的更加重要的手段,当然也是相对更加需要心智能力的手段
  • “正确地思考”,才是获取真正意义上的知识的主要手段。

很多时候,人们的善良出自于软弱,而他们的残暴出只不过来自于恐惧。

摆脱经验的局限

生活中几乎所有主要的“沟通障碍”本质上都是因为沟通双方无法让对方理解与他们的经验相悖的知识或者信息造成的


关于自学能力

自学能力的基础技能是阅读理解能力。
检索能力是建立在相当熟练的阅读能力之上的能力。
写作能力在自学能力中占据着重要的地位。
实践能力是自学能力最终能够转化为真正价值的根本。
永远保持开放的心态
了解学习的进程

学会考试

比如高考,比如考研,比如托福与 GRE,就别想着什么智取,什么捷径,什么速成,统统没戏。其实,很少有什么考试考验你的智商, 本质上来看,谁准备的更久,准备的更充分,谁就更可能胜出——尤其是像SAT 、托福、雅思、GRE、GMAT 这种设计精良的考试。

准备考试最好的方法就是做题

边做题边整理还不够。还要经常找时间重新审视自己的记录

  1. 要热爱考试,因为你喜欢通行证。
  2. 分辨考试的重要性。
  3. 提前很久开始准备重要的考试。
  4. 做题是最好的准备方法。
  5. 通过做题了解考试的重点、难点。
  6. 全面补习难点重点,并经常重新审视。
  7. 教是最好的学习方法。

学会记笔记

  • 笔记区域:尽可能完整而全面地记录演讲。
  • 提示栏:当你做笔记的时候, 让提示栏保持空白。演讲过后,简化你的笔记使之成
    为简明提示以供日后记忆,回顾和消化(思考)之用。
  • 概要:用一个或二个句子总结你的每页笔记。

在记笔记的时候,可以借助一些符号来简化书写

接受自己与别人没什么不同,至少没什么本质性上的 不同,是心智正常成长的重要前提 之一。

人类拥有的普遍的认知偏差之一就是:把成功揽到自己身上,把失败归咎于别人或者坏运气。

不要相信运气,更不要相信


关于效率

记住,你不可能百分之百地有效率,至少不可能总是百分之百地有效率。

要想办法提前预知自己会需要怎样的技能,然后确定那是一个自己可以通过练习真正熟练掌握的技能之后,而后制定长期计划,一点一点地执行该计划。

机会总是眷顾那些有准备好了人

记住,意外总是发生的原因绝对不是因为你的运气格外差,而往往只不过是因为你考虑得不够周全。

机器学习代码库

发表于 2016 年 08 月 23 日   |   分类于 机器学习   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2015/07/26/machine-learn-resource/ )

今天给大家介绍一下开源机器学习代码库:

1.机器学习开源软件网(收录了各种机器学习的各种编程语言学术与商业的开源软件)

http://mloss.org

2 偶尔找到的机器学习资源网:(也非常全,1和2基本收录了所有ML的经典开源软件了)

http://www.dmoz.org/Computers/Artificial_Intelligence/Machine_Learning/Software/

3 libsvm (支持向量机界最牛的,不用多说了,台湾大学的林教授的杰作)

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

4 WEKA (基于java的机器学习算法最全面最易用的开源软件)

http://www.cs.waikato.ac.nz/ml/weka/

5 scikit (本人最喜欢的一个基于python的机器学习软件,代码写得非常好,而且官方的文档非常全,所有都有例子,算法也齐全,开发也活跃,强烈推荐给大家用)

http://scikit-learn.org/stable/

6 OpenCv(最牛的开源计算机视觉库了,前途无可限量,做图像处理与模式识别的一定要用,总不能整天抱着matlab做实验和工业界脱节吧,但是有一定难度)

http://opencv.willowgarage.com/wiki/

7 Orange (基于c++和python接口的机器学习软件,界面漂亮,调用方便,可以同时学习C++和python,还有可视化的功能,)

http://orange.biolab.si/

8 Mallet (基于JAVA实现的机器学习库,主要用于自然语言处理方面,特色是马尔可夫模型和随机域做得好,可和WEKA互补)

http://mallet.cs.umass.edu/

9 NLTK(PYTHON的自然处理开源库,非常易用,也强大,还有几本orelly的经典教程)

http://nltk.org/

10 lucene(基于java的包括nutch,solr,hadoop,mahout等全套,是做信息检索和搜索引擎的同志们必学的开源软件了,学JAVA的必学)

http://lucene.apache.org/

阿里云服务器安装svn服务器端

发表于 2016 年 08 月 22 日   |   分类于 开发工具 , SVN   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/08/22/aliyun-svn/ )

1.安装svn服务器端

yum install subversion      

从镜像下载安装svn服务器端
中间会提示是否ok,输入y,确认
安装成功提示:…..complete!

依次执行如下命令:

cd /usr/local/              //进入目录,准备创建svn目录
mkdir svnRepo                   //创建一个svn目录
chmod -R 777 svnRepo            //修改目录权限为777
svnadmin create /usr/local/svnRepo/first  //创建一个svn版本仓库first(first可以随便起名字)

cd first/conf //进入first版本仓库下的配置文件目录

2.下面要修改这个目录下的三个配置文件

(1)vi svnserve.conf //配置版本库信息和用户文件和用户密码文件的路径、版本库路径
把

# anon-access = read
# auth-access = write
# password-db = passwd

//这四行,前面的#号和空格去掉,变成

anon-access = none      //改成none
auth-access = write
password-db = passwd

realm = first           //改成自己的版本库

保存退出

(2)vi authz //文件,创建svn组和组用户的权限

[groups]
first = ddl,shl //创建一个first的组,并制定两个用户ddl和shl
[/]             //制定根目录下的权限
@first = rw     //first组用户权限为读写
* = r           //其他用户只有读权限

保存退出

(3) vi passwd //创建或修改用户密码

[users]
ddl = 123456    //用户名为gep的用户的密码为123456
shl = 123456    //。。。

保存退出

3.然后要设置自启动

vi /etc/rc.local    

打开自启动文件
文件内容如下

#!/bin/sh
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

添加下面一行

svnserve -d -r /usr/local/svnRepo/first

保存退出

ps aux |grep 'svn'  查找所有svn启动的进程

杀死 然后启动svn

svnserve -d -r /usr/local/svnRepo/first 启动svn(可以把这个放到/etc/local/rc.local文件中,实现开机自启动)

4.限制不同的用户对不同的版本库操作权限,修改版本库中的conf目录下的 authz文件

以配置 first 版本库为例

vi authz

[groups]
company = user1,user2
[first:/]             //指定版本库跟目录下的权限
@company = rw     //company组用户权限为读写
* = r           //其他用户只有读权限

保存退出

vi passwd 设置组中用户的账号和密码

[users]
user1  = 123456
user2 = 123456

5.客户端访问

假设客户端使用tortoiseSVN
打开资源库浏览器输入地址, svn://你的svn服务器ip:3690
输入用户名ddl 密码12345
因为没有网资源库里放文件所以需要你用客户端右键【create forder】,然后【add forder】

6.SVN版本库起动方式,现在svnRepo下面有 first、test 两个版本库

1:单版本库起动

svnserve -d -r /usr/local/svnRepo/first

2:多版本库起动

svnserve -d -r /usr/local/svnRepo

区别在于起动svn时候的命令中的启动参数-r指定的目录。

基于UDP协议实现的Java聊天室

发表于 2016 年 05 月 24 日   |   分类于 Java , Socket   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/05/24/chat-udp/ )

Github :https://github.com/chensian/Chat-UDP

项目环境

eclipse EE

JDK1.8 + Mysql

摘要

本聊天室系统是采用C/S架构设计的JAVA语言编写的聊天系统。该聊天系统具有完整的会话功能,服务器具有侦听服务,转发聊天信息,响应用户下线,发送系统消息的功能。客户端具有登陆,断开连接,发送聊天信息,接收聊天信息的功能。该聊天室由服务端和客户端组成,主要用到Socket通信的网络应用。

模块分解

功能需求分析

聊天室客户端需求分析

(1)基本功能即可以即时通讯

(2)可以查询在线用户基本信息

(3)可以进行群聊

(4)可以进行私聊

(5)可以显示在线用户列表

(6)可以离线接收信息

聊天室服务器端需求分析

(1)可以显示在线用户基本信

(2)可以显示用户发送的聊天信息的基本情况(信息内容)

UDP协议

UDP协议的几个特性

(1)UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

TCP与UDP比较

(1)UDP是无状态的,该协议使得数据传输的速度得到大幅度的提高。视频聊天语音聊天基本都是用UPD协议。 TCP接到客户端请求后马上做一个线程,将连接对象传递进去进行处理!但是UDP的话是没有连接对象的,只要消息包的概念!
(2)TCP是面向连接的,有比较高的可靠性,一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。

Java UDP 技术

DatagramPacket类说明

该类表示一个数据报包。该数据报包用来实现一个无连接包的传送服务。它是进行数据报通信的基本单位。包含了IP地址、端口号和需要传输的数据等。在发送和接收数据报时,要创建DatagramPakcet类对象作为数据的载体。

构造函数

(1)public DatagramPacket(byte ibuf[],int ilength)

功能:创建一个用于接收数据报的DatagramPacket类对象。

参数:

buf:存储数据报的缓冲区。在数据报通信中,发送和接收一个数据报,都需提供一个缓冲区,用来安置发送和接收到的数据报。

length:接收数据报的长度,必须小于等于ibuf.length。

(2)public DatagramPacket(byte ibuf[],int ilength,InetAddress iaddr,int iport)

功能:创建一个用于发送数据报的DatagramPacket类对象。

参数:

buf:存储数据报的缓冲区。

length:发送数据报的长度,必须小于等于ibuf.length。

addr:数据报要发送到的目的IP地址。

port:数据报要发送到的目的地址的端口号。

常用方法

(1)public synchronized InetAddress getAddress()

功能:返回存放在接收或发送的数据报中的IP址。

(2)public synchronized int getPort()

功能:返回存放在接收或发送的数据报中的端口号。

(3)public synchronized byte[] getData()

功能:返回存放在数据报中的数据。

(4)public synchronized int getLength()

功能:返回数据报中数据的长度。

(5)public synchronized void setAddress(InetAddress addr)

功能:设置发送数据报的目的地址为iaddr。

(6)public synchronized void setPort(int port)

功能:设置发送数据报的目的地址的端口号为port。

(7)public synchronized void setData(byte ibuf[])

功能:设置数据报中的数据内容为字节数组ibuf的数据。

(8)public synchronized void setLength(int ilength)

功能:设置数据报中的数据的长度为ilength。

DatagramSocket类说明

该类表示用来发送和接收数据报包的套接字(Socket)。要收发DatagramPacket,必须打开一个数据报套接字(Datagram Socket)。

在Java中,数据报套接字通过DatagramSocket类来创建和访问。

构造函数

(1)public DatagramSocket() throws SocketException

功能:创建用于数据报通信的socket对象,由本地主机自动指定的一个可用的端口号。

(2)public DatagramSocket(int port) throws SocketException

功能:创建用于数据报通信的socket对象,并且把它绑定到本地主机指定的端口port。

(3)public DatagramSocket(int port,InetAddress addr) throws SocketException

功能:创建用于数据报通信的socket对象,并绑定到指定的本地地址addr的指定端口port。端口号port必须为0和65535之间的一个。

常用方法

(1)public void send(DatagramPacket p) throws IOException

功能:从此socket发送数据报包。

(2)public synchronized void receive(DatagramPacket p) throws IOException

功能:从网络接收一个UDP数据报包。存储在DatagramPacket类对象p中。该数据报包还包含发送方的IP 地址和发送方主机的端口号。

(3)public InetAddress getLocalAddress()

功能:获取该socket绑定的本地地址。

(4)public int getLocalPort()

功能:获取该socket绑定的本地主机的端口号。

(5)public void close()

功能:释放该数据报socket所占用的端口。

详细设计

服务器端介绍

1)newsPush(String, DatagramPacket)

说明:登录时,离线消息推送。

2)sendAll(Message, DatagramPacket)

说明:群发消息

3)sendONE(Message, DatagramPacket)

说明:私聊私发消息

4)register(User, DatagramPacket)

说明:注册事务处理

5)login(User, DatagramPacket)

说明:登录事务处理

客户端介绍

1)登录失败:用户名或者密码错误,返回200

2)登录成功:服务器返回211

3)重复登录,服务器对此ID的原登录客户端返回201

4)登录时,对密码传送进行加密(采用md5计算摘要法),发送换算好后的password传输至服务器。

5)类型与长度:

用户名:固定10位的数字(注册人的学号)组成。

密码:6~8位,仅接受由数字或字母组成的密码。

1
2
3
(用户名和密码格式设置错误了,服务器将会返回100)
(用户名重复,服务器将会返回101)
(注册成功,服务器返回111)
聊天室

1)clearMessage()

说明:清空聊天窗口记录

2)exit()

说明:退出聊天室

3)sendMessage()

说明:发送消息,可以选择群聊或私聊

4)changeUser()

说明:切换聊天好友。

工具类
java对象与字节数组相互转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static byte[] ObjectToByte(java.lang.Object obj) {
byte[] bytes = null;
try {
// object to bytearray
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(obj);
bytes = bo.toByteArray();
bo.close();
oo.close();
} catch (Exception e) {
System.out.println("translation" + e.getMessage());
e.printStackTrace();
}
return bytes;
}
public static Object ByteToObject(DatagramPacket inPacket) {
byte[] bytes = inPacket.getData();
Object obj = null;
try {
// bytearray to object
ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
ObjectInputStream oi = new ObjectInputStream(bi);
obj = oi.readObject();
bi.close();
oi.close();
} catch (Exception e) {
System.out.println("translation" + e.getMessage());
e.printStackTrace();
}
return obj;
}
结果状态码

运行界面
注册界面

注册失败

聊天室界面

群发消息

私聊功能

离线接受功能

Spring @Transactional配置

发表于 2016 年 04 月 11 日   |   分类于 JavaEE , Spring   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2016/04/11/spring-transactional/ )

在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。

Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked
如果遇到checked意外就不回滚。
如何改变默认规则:

1 让checked例外也回滚:在整个方法前加上
@Transactional(rollbackFor=Exception.class)

2 让unchecked例外不回滚:
@Transactional(notRollbackFor=RunTimeException.class)

3 不需要事务管理的(只查询的)方法:
@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意: 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。

@Transactional设置:
propagation:事务传播性设置,Propagation枚举类型。Spring支持的事务传播属性包括7种:
PROPAGATION_MANDATORY:方法必须在事务中执行,否则抛出异常。
PROPAGATION_NESTED:使方法运行在嵌套事务中,否则和PROPAGATION_REQUIRED一样。
PROPAGATION_NEVER :当前方法永远不在事务中运行,否则抛出异常。
PROPAGATION_NOT_SUPPORTED:定义为当前事务不支持的方法,在该方法执行期间正在运行的事务会被暂停
PROPAGATION_REQUIRED:当前的方法必须运行在事务中,如果没有事务就新建一个事务。新事务和方法一起开始,随着方法返回或者抛出异常时终止。
PROPAGATION_REQUIRED_NEW :当前方法必须新建一个事务,如果当前的事务正在运行则暂停。
PROPAGATION_SUPPORTS :规定当前方法支持当前事务,但是如果没有事务在运行就使用非事务方法执行。
isolation:事务隔离性级别设置,Isolation枚举类型
ISOLATION_DEFAULT :使用数据库默认的隔离级别
ISOLATION_COMMITTED:允许其他事务已经提交的更新(防止脏读取)
ISOLATION_READ_UNCOMMITTED:允许读取其他事务未提交的更新,会导致三个缺陷发生。执行速度最快
ISOLATION_REPEATABLE_READ :除非事务自身更改了数据,否则事务多次读取的数据相同(防止脏数据,多次重复读取)
ISOLATION_SERIALIZABLE:隔离级别最高,可以防止三个缺陷,但是速度最慢,影响性能。

readOnly:读写性事务,只读性事务,布尔型
对数据库的操作中,查询是使用最频繁的操作,每次执行查询时都要从数据库中重新读取数据,有时多次读取的数据都是相同的,这样的数据操作不仅浪费了系统资源,还影响了系统速度。对访问量大的程序来说,节省这部分资源可以大大提 升系统速度。
将事务声明为只读的,那么数据库可以根据事务的特性优化事务的读取操作

timeout:超时时间,单位秒
事务可能因为某种原因很长时间没有反应,这期间可能锁定了数据库表,影响性能。设置超时时间,如果超过该时间,事务自动回滚。

rollbackFor:一组异常类的实例,遇到时必须进行回滚
rollbackForClassname:一组异常类的名字,遇到时必须进行回滚
noRollbackFor:一组异常类的实例,遇到时必须不回滚
noRollbackForClassname:一组异常类的名字,遇到时必须不回滚

Starting MySQL. ERROR

发表于 2015 年 09 月 07 日   |   分类于 Linux   |     |   阅读次数

转载请注明出处,谢谢!(原文链接:https://chensian.github.io/2015/09/07/linux-mysql-error/ )

Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/iZ94mck3376Z.pid).

[root@snsgou mysql]# service mysql restart
MySQL server PID file could not be found![失败]
Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/snsgou.pid).[失败]

Google了下 ,问题可能的原因有多种,具体什么原因最好的办法是先查看下错误日志:

1、可能是/usr/local/mysql/data/mysql.pid文件没有写的权限

解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!

2、可能进程里已经存在mysql进程

解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!

3、可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。

解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的 !

4、mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。

解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data

5、skip-federated字段问题

解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。

6、错误日志目录不存在

解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限

7、selinux惹的祸,如果是centos系统,默认会开启selinux

解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。

123
陈世强

陈世强

你陪着我的时候,我从没有羡慕任何人。

26 日志
27 分类
30 标签
GitHub CSDN 知乎
Links
  • MacTalk
  • Title
© 2015 - 2018 陈世强
由 Hexo 强力驱动
主题 - NexT.Pisces