自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

转载 从volatile说到i++的线程安全问题

转载  http://www.cnblogs.com/zemliu/p/3298685.html结论volatile解决了线程间共享变量的可见性问题使用volatile会增加性能开销volatile并不能解决线程同步问题解决i++或者++i这样的线程同步问题需要使用synchronized或者AtomicXX系列的包装类,同时也会增加性能开销该段参考http

2017-03-10 10:54:58 890

原创 servlet 入门基本知识 (二)

tomcat和servlet 在网络中的位置开发Servlet有三种方法:a.实现Servlet接口 b.继承GenericServlet c.继承HttpServlet servlet生命周期通过继承httpServlet开发servlet

2016-09-12 16:39:15 455

原创 Servlet 入门基本知识 (一)

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

2016-09-12 16:16:00 578

原创 从Excel手动导入数据到SQLite数据库中(Flask)

在Flask项目中,应用SQLite数据库。有来自Excel的大量数据需要导入数据库。工具都要付费,就自己导入了一下:利用Python 中的xlrd库,需要先安装这个库。$pip install xlrd(app为项目文件夹,app.models里面定义了Benke_grade类)class Benke_grade(db.Model): __tablename__ =

2016-06-20 21:05:13 2713

原创 抽象类 和 接口

抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。一、抽象类        如果自下而上在类的继承层次中上移位于上层的类更具有通用性,甚至可能更加抽象。从某种角度看,祖先累更加通用,人们只将它作为派生其他类的基类,而不想作为想使用的特定实例类。抽象类体现了

2016-06-16 20:42:46 568

原创 多线程(二) 同步 锁对象和条件对象

什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题。锁对象  在Java SE5.0引入ReentrantLock类。Lock是Java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定

2016-05-29 10:52:41 2838

原创 多线程(三) synchronized关键字

Java线程的两个特性,可见性和有序性。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现。例如:在多个线程之间共享了Bank类的一个对象,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线程栈),工作内存存储了主内存Bank对象的一个副本,当线程操作Bank对象时,首先从主内存复制Bank对象到工作内存中,然后执行代码accounts[from]

2016-05-28 16:11:10 504

转载 java异常处理机制

异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦!  Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这

2016-05-27 10:44:57 437

原创 多线程(一)多线程基础、多线程状态

多任务:在同一刻运行多个程序的能力。并发执行的进程数目并不是由CPU数目制约的。操作系统将系统将CPU的时间片分配给每一个进程,给人以并行处理的感觉。多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。通常每个任务称为一个线程,她是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序。多进程与多线程的区别:本质的区别在于每个进程拥有自己的一套变量,多个进程的内部数据和状态

2016-05-27 10:44:01 485

转载 session和cookie机制

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。一.cookie和session机制之间的区别和联系     具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户

2016-05-27 10:41:01 430

原创 Java的final关键字

1.final类          final修饰的类不能被继承,因此的成员方法没有机会被覆盖,final类中的所有成员方法都会被隐式地指定为final方法。final类中的成员变量可以根据需要设为final。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。 final方法不能被子类的方法覆盖,但可以被继承。

2016-05-26 16:57:55 377

转载 作为前端应当了解的Web缓存知识

缓存优点通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备。对于前端开发者来说,浏览器充当了重要角色。除此外常见的还有各种各样的代理服务器也可以做缓存。当Web请求到达缓存时,缓存从本地副本`本地副本`中提取这个副本内容而不需要经过服务器。这带来了以下优点:缓存减少了冗余的数据传输,节省流量缓存缓解了带宽瓶颈问题。不需要更多的带宽就能更

2016-05-26 16:20:44 823

转载 69 个经典 Spring 面试题和答案

Spring 概述1. 什么是spring?Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。2. 使用Spring框架的好处是什么?轻量:Spring 是轻量的,基本的版本大约2M

2016-05-26 16:18:17 47434 5

原创 动态规划

动态规划通常用来解决最优化问题,在这类问题中,我们通过做出一组选择来达到最优解。在作出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术就会很有效,起关键技术就是对每一个这样的子问题都保存其解,当其出现重复即可避免重复求解。      动态规划与分治方法很像,都是通过组合子问题的解来求解原问题。分治方法:将问题划分为互不相交的子问题,递归的

2016-05-21 16:09:55 532

原创 Flask Python以二进制六存储图片数据库并读取

一般都会存储路径,担忧少数的要求存储图片到数据库。下面的例子介绍了如何在Flask项目里存储图片到数据库以二进制流的方式。并从数据库读取app\models.pyclass Document3(db.Model): __tablename__ = 'documents3' id = db.Column(db.Integer, primary_key=True

2016-05-13 11:25:03 7522 2

原创 Flask 数据库多对多自引用关系

上篇介绍的多对多关系是两个模型是之间的多对多关系,关联表联接的是两个明确的实体,还有些情况下只有一个模型,与自己之间存在多对多关系。比如用户之间的关注。表示用户关注其他用户时,只有用户一个实体,没有第二个实体。如果关系中的两侧都在同一个表中, 这种关系称为自引用关系。       在关注中, 关系的左侧是用户实体,可以称为“关注者”;关系的右侧也是用户实体,但这些是“被关注者”。从概念

2016-05-09 20:04:41 4629 3

原创 Flask 数据库高级多对多关系

之前介绍了多对多关系:http://blog.csdn.net/ying847782627/article/details/51333090        在之前介绍的多对多关系中,关联表就是一个简单的表,不是模型,SQLAlchemy 会自动接管这个表。多对多关系可以分解成原表和关联表之间的两个一对多关系。这个表里面存储了原表的两个主键作为自己的联合主键。存在的问题:因为在这种关联表里操

2016-05-07 19:43:04 4253

原创 Flask 数据库多对多关系

数据库使用关系建立记录之间的联系。其中,一对多关系是最常用的关系类型,它把一个记录和一组相关的记录联系在一起。实现这种关系时,要在“多”这一侧加入一个外键,指向“一”这一侧联接的记录。大部分的其他关系类型都可以从一对多类型中衍生。 多对一关系从“多”这一侧看,就是一对多关系。 一对一关系类型是简化版的一对多关系, 限制“多”这一侧最多只能有一个记录。唯一不能从一对多关系中简单演化出来的类型是多对多

2016-05-06 17:05:58 10925 1

原创 Flask下拉列表与数据库同步

WTForms 对 HTML 表单控件 进行 SelectField 包装,从而实现下拉列表。使用下拉列表有两种情况,第一种直接下拉选择设定的值,然后将选择的值读取存储。这种情况比较简单,1.首先,在form.py中定义表单以及SelectField下拉列表app\main\form.pyclass SmFormAdmin(Form): status = Sele

2016-05-06 12:07:56 16939 3

原创 Flask分页显示数据

在做网页的过程中,随着展示的数据增多,如果要在一页中显示全部内容,浏览速度会变慢且不符合实际需求。在 Web 浏览器中, 内容多的网页需要花费更多的时间生成、下载和渲染, 所以网页内容变多会降低用户体验的质量。这一问题的解决方法是分页显示数据,进行片段式渲染。在页面中渲染数据app/main/views.py @main.route('/userManage_admin',

2016-05-06 10:06:42 19958

原创 Flask更新数据库出错

在修改模型更新数据库总是出错,现把大概见到的错误总结一下。1.数据库关系不正确。在刚添加的模型中,如果不是非常确定,并且添加的模型比较多的话,建议先写简单的模型,探索明白具体过程,确定没有其他问题的时候,再添加复杂关系依赖。并且一定要设置debuge=True.此时再根据报错修改关系就简单多了。2.如果是直接在模型上添加一列的话,操作步骤为,修改模型-->执行迁移-->更新数据库

2016-04-26 09:29:52 2045

原创 Flask迁移数据库

在开发程序的过程中,你会发现有时需要修改数据库模型,而且修改之后还需要更新数据库。仅当数据库表不存在时, Flask-SQLAlchemy 才会根据模型进行创建。因此,更新表的唯一方式就是先删除旧表,不过这样做会丢失数据库中的所有数据。      更新表的更好方法是使用数据库迁移框架。源码版本控制工具可以跟踪源码文件的变化,类似地,数据库迁移框架能跟踪数据库模式的变化,然后增量式的把变化应

2016-04-25 20:09:39 7236 1

原创 flask数据库可视化SQLite

Flask-SQLAlchemy 是一个 Flask 扩展,简化了在 Flask 程序中使用 SQLAlchemy 的操作。SQLAlchemy 是一个很强大的关系型数据库框架, 支持多种数据库后台。 SQLAlchemy 提供了高层 ORM,也提供了使用数据库原生 SQL 的低层功能。和其他大多数扩展一样, Flask-SQLAlchemy 也使用 pip 安装:(venv) $

2016-04-22 18:13:35 5087

原创 Flask创建虚拟数据

在Flask开发中,经常需要一个包含大量数据的数据库,比如说实现分页功能。手动添加数据库记录浪费时间而且很麻烦, 所以最好能使用自动化方案。有多个 Python 包可用于生成虚拟信息,其中功能相对完善的 ForgeryPy,可以使用 pip 进行安装:(venv) $ pip install forgerypy        因为它只在开发过程中使用,严格来说, Forgery

2016-04-22 17:32:59 2088

原创 Flask需求文件重新生成虚拟环境

在大型的Flask多文件程序中,一个项目对应一个虚拟环境,如果需要在另一个目录或者另一台电脑重新生成虚拟环境的话就得重新下载安装各种扩展包。所以为了避免这种情况以及程序与安装版本号不兼容的问题,程序中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号。        如果要在另一台电脑上重新生成虚拟环境, 这个文件的重要性就体现出来了,例如部署程序时使用的

2016-04-22 17:05:39 2041

原创 windows下Flask上传文件路径

在windows下用Flask实现图片上传,上传后总是找不到正确的文件夹路径。修改上传文件夹为如下的时候:UPLOAD_FOLDER =sys.path[0]上传到程序所在的当前文件夹,但是添加了当前路径下的文件夹后就会出错,试过了各种组合,最后找到了一个很好的并且可以随意任何操作系统之间迁移的方法:python中os.path常用模块:os.path.sep路径分隔符 ,linux下

2016-04-21 14:51:37 4998

原创 Flask不能显示中文解决办法

在FLask程序编写中,发现遇到程序中出现中文就会提示错误。加入#-*- coding: utf-8 -*-也没用。后来发现是Python中的默认编码没有‘UTF-8’。所以修改如下:进入安装Python目录,进入Lib目录下,找到mimetypes.py文件,打开后加入如下语句后保存import sysdefault_encoding = 'utf-8'if sys.getd

2016-04-20 21:19:16 9016 1

原创 Flask 多文件基本结构

程序变复杂后,使用单个大型源码文件会导致很多问题。不同于大多数其他的 Web 框架, Flask 并不强制要求大型项目使用特定的组织方式,程序结构的组织方式完全由开发者决定。在这里介绍一种使用包和模块组织大型程序的方式。多文件 Flask 程序的基本结构|-flasky |-app/ |-templates/ |-static/

2016-04-19 11:49:47 2955

原创 Flask 重定向用户和会话

用户输入名字后提交表单,然后点击浏览器的刷新按钮,会看到一个莫名其妙的警告,要求在再次提交表单之前进行确认。之所以出现这种情况,是因为刷新页面时浏览器会重新发送之前已经发送过的最后一个请求。如果这个请求是一个包含表单数据的POST 请求,刷新页面后会再次提交表单。大多数情况下,这并不是理想的处理方式。很多用户都不理解浏览器发出的这个警告。 基于这个原因,最好别让Web 程序把 POST 请求作

2016-04-12 21:11:47 6136

原创 比较排序算法

比较排序:在排序的最终结果中,各元素的次序依赖于他们之间的比较。我们把这类算法称为比较排序。比较排序的下界               在一个比较排序算法中,我们只使用元素间的比较来获得输入序列中的元素间次序信息。也就是说,给定两个元素ai, aj ,可以执行aiaiai=aj、ai>aj、ai>=aj中的比较操作来确定他们之间的相对次序。我们不能使用其他方法观察元素的值或者他们之间次序的

2016-04-11 15:07:59 626

原创 javase JDK 和 javaee SDK

下载了eclipse for javaee 打算配置开发Java EE程序,于是去官网下载JDK。发现JDK是在javase/download下面,就切换到javaee/download下面,发现没有JDK,只有SDK。先下载了Javaee下的SDK:并没有windows和Linux的差别。解压后,翻译READER.ME文件如下:感谢您下载GlassFish服务器开源版4.1!

2016-04-09 11:00:33 7358

原创 渐进符号

大写O符号f(n)=O(g(n)),这里f(n)是分析出来算法的执行次数的函数,O的定义:当且仅当存在正的常数c和n0,使得对于所有的n>=n0,有f(n)这里cg(n)就是函数f(n)的上限。几种函数的例子:1.线性函数f(n)=3n+2,当n>=2时,3n+22.平方函数f(

2016-04-08 18:05:07 2665

原创 计数排序

计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。计数排序的基本思想是:对每一个输入元素x,确定小于x的元素的个数。利用这一信息就可以把x直接放在它的输出数组中的位置上。在计数排序中,假设输入是一个数组A[1..n],A.length=n。我们还需要两个数组:B[1..n]存放排序的输出,C[0..k]提供存储空间。COUNTIN

2016-04-08 10:25:23 457

原创 替换空格 合并数组字符串

把字符串中的每个空格换成“%20”。注意:如果在原来的字符串上做替换,要保证字符串最后有足够的空余内存直接的解法:时间复杂度为O(n^2)从头到尾扫描字符串,每次碰到空格的时候做替换。由于是把一个字符换成三个字符,必须把空格后面的所有字符都向后移动两个字节,否则就有两个字符被覆盖了。效率不高的原因是很多字符都移动了很多次,所以应该减少移动次数。从

2016-04-03 13:06:25 715

原创 Fibonacci(斐波那契)序列的递归和非递归

Fibonacci(斐波那契)序列的递归和非递归写一个函数,输入n,求斐波那契数列的第n项:// ====================方法1:递归====================long long Fibonacci_Solution1(unsigned int n){ if(n <= 0) return 0; if(n == 1)

2016-04-01 16:34:53 2230

原创 快速排序改进

快速排序平均复杂度为O(nlgn),最坏情况为O(n^2),即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况下为O(n^2)1.如果在排序时选取最后一个元素为基准,则可以通过以下方法来避免划分的不平衡。int Patition(int *pnArr, int nLeft, int nRigh

2016-03-30 22:05:01 1020

原创 旋转数组中的最小数字

旋转数组中的最小数字:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如:数组 {3,4,5,1,2} 为 {1,2,3,4,5} 的一个旋转,该数组的最小值为1.直观的解法:从头到尾遍历数组一次,我们就能找到最小的元素,时间复杂度为O(n)。利用旋转数组的特性:1.旋转数组划分为两个排序的子数组,而且前

2016-03-29 20:59:34 840

原创 堆排序

1.堆1.堆的基本性质及操作 2.堆的维护 3.建堆 4堆排序 C-算法-堆的基本操作-时间复杂度-堆排序完整源码堆排序集合了归并排序的优点:时间复杂度位O(nlgn)                       插入排序的优点:具有空间原址性(任何时候只需要常数个额外的元素空间存储临时数据)              堆是一个数组,可以被看成是一个近似的完全二叉树。堆上的每个节点对应数组中的一个元素。除了最底层外,该树是完全充满的。这样给定一个结点的下标 i,我们很容易计算得到

2016-03-28 20:24:37 512

SQLiteExpertPers

SQLite可视化管理工具,允许用户在 SQLite 服务器上执行创建、编辑、复制、提取等操作。SQLite Expert Professional是一款可视化的数据库管理工具,允许用户在 SQLite 服务器上执行创建、编辑、复制、提取等操作。SQLite Expert支持所有的图形界面的SQLite特征。它包括一个可视化查询生成器,一个SQL编辑与语法突出和代码自动完成,强大的table和view设计与导入导出功能。

2016-04-22

spark各方面学习合集

spark入门一些文档,还有其他的一些资料

2015-03-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除