Nginx

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

uWSGI:

  • APP(应用程序),就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻辑部分。

  • WSGI,是一个协议,Python用于Web开发的协议

  • uWSGI,是一个程序,充当Web服务器或中间件。

  • 如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件

  • 如果架构是uWSGI+APP,uWSGI是一个服务器

  • uwsgi,是uWSGI程序实现的一个自有的协议。

Web协议出现顺序: 
CGI -> FCGI -> WSGI -> uwsgi

  1. CGI,最早的协议

  2. FCGI,比CGI快

  3. WSGI,Python专用的协议

  4. uwsgi,比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议.

Django:

Django(维基百科) Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。

Django框架的核心包括:一个 面向对象 的映射器,用作数据模型(以Python类的形式定义)和关联性数据库间的媒介;一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;以及一个模板系统。

核心框架中还包括:

l 一个轻量级的、独立的Web服务器,用于开发和测试。

l 一个表单序列化及验证系统,用于HTML表单和适于数据库存储的数据之间的转换。

l 一个缓存框架,并有几种缓存方式可供选择。

l 中间件支持,允许对请求处理的各个阶段进行干涉。

l 内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信。

l 一个序列化系统,能够生成或读取采用XML或JSON表示的Django模型实例。

l 一个用于扩展模板引擎的能力的系统。

Django主要特点

  • Django“自备军需”(Batteries-Included)

Django基于“自备军需”的理念,您不必使用单独的库来实现常见功能,例如身份验证,URL路由,模板系统,对象关系映射器(ORM)和数据库模型迁移。 如果您正在使用或曾经用过Flask,您一定注意到了它需要调用其他库,如Flask-Login来执行用户身份验证。 Django不是这样。

  • 自由的API

使用Django,很容易根据您的模型生成Python API。 只需一个简单的命令,不需要额外的编码就足以开始生成API了。

  • 独特的管理页面

即使在网站完全构建之前,您也可以从外部贡献者处获取有关信息。 这就是Django的力量。 该框架使您能够快速轻松地从应用模型生成管理站点。

  • 代码设计

与大多数 Web 框架相反,Django 通过使用称为 app 的东西,更容易地将新功能添加到产品中。 因此,开发者可以感受到 Django 鼓励大家编写模块化的代码。

  • Django对ORM的完善支持

Django的对象关系映射 (ORM) 对数据库进行了完善的支持。所以,它用于查询数据库所需的数据时,没有处理结构化查询语言(SQL)的麻烦。 与许多通过SQL直接在数据库上工作的Python框架不同,Django开发人员有一个独特的选择来操纵相应的Python的Model对象。 Django对于PostgreSQL,MySQL,SQLite和Oracle等数据库都能做到开箱即用。

  • 强大的内置模板系统

基于继承系统,Django 的模板允许开发人员通过非常少量的前端代码构建整个动态网站。这得益于使用其他上下文特定元素替换模板的某些元素的选项。 想象一下,你知道你网站的每个页面都会有一个页眉和一个页脚。 现在,您首先需要在网站的基本模板中编写代码。 然后,您可以从应用程序的其他部分动态地更改这两个内容之间的组件。

  • 简单可读的网址

很难正确阅读在PHP os ASP中开发的URL? 使用 Django,您可以创建简单易读的 URL,这对人和搜索引擎都有好处。 您也可以使用其他框架创建可读 URL,但没有一个与 Django 一样容易进行 URL 构造

Django是一个Python编写的,高级的,MVC风格的开源库。 Django也被称为“完美主义者的最终框架”,它最初是为新闻网站设计的,因为它允许开发人员编写数据库驱动的Web应用程序,而无需从头开始编码。

除了更快完成常见的Web开发任务,Django还可以保持设计干净且实用。 Django是Python Web开发新人的最佳选择,因为官方文档和教程是几个(同类)软件开发框架中最好的。

技术市场充斥着一系列网络框架,但Django在最受欢迎的服务器端Web框架里处于顶峰位置。设计Django背后的座右铭很简单:避免重复。 Django是用Python编写的,因此其减少了太多中间层代码并突出提高了效率。Django可以支持云平台,使其成为Web开发中更受欢迎的选择。

部署 Nginx + uWSGI + Python + Django

nginx版本:1.5.9

Django版本:1.4.9

uwsgi版本:2.0.4

Python版本:2.6.6

安装,Django,nginx,uwsgi,MySQL,采用编译安装,便于维护

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
[root@kurol ~] # mkdir -p /data/logs
[root@kurol ~] # yum -y install gcc cc gcc-c++
[root@kurol ~] # tar -zxvf pcre-8.34.tar.gz
[root@kurol ~] # cd pcre-8.34
[root@kurol pcre-8.34] # ./configure
[root@kurol pcre-8.34] # make && make install
[root@kurol pcre-8.34] # cd ..
[root@kurol ~] # wget http://nginx.org/download/nginx-1.5.9.tar.gz
[root@kurol ~] # tar -zxvf nginx-1.5.9.tar.gz
[root@kurol ~] # cd nginx-1.5.9
[root@kurol nginx-1.5.9] # ./configure  --prefix=/usr/local/nginx --with-http_stub_status_module --without-http_gzip_module
[root@kurol nginx-1.5.9] # make && make install
[root@kurol nginx-1.5.9] # cd ..
[root@kurol ~] # yum -y install MySQL-python mysql mysql-devel mysql-server
[root@kurol ~] # yum -y install libxml2 python-devel
[root@kurol ~] # wget http://projects.unbit.it/downloads/uwsgi-2.0.4.tar.gz
[root@kurol ~] # tar -zxvf uwsgi-2.0.4.tar.gz
[root@kurol ~] # cd uwsgi-2.0.4
[root@kurol uwsgi-2.0.4] # make
[root@kurol uwsgi-2.0.4] # cp uwsgi /usr/bin
[root@kurol uwsgi-2.0.4] # cd ..
[root@kurol ~] # wget https://www.djangoproject.com/m/releases/1.4/Django-1.4.9.tar.gz --no-check-certificate
[root@kurol ~] # tar -zvxf Django-1.4.9.tar.gz
[root@kurol ~] # cd Django-1.4.9
[root@kurol Django-1.4.9] # python setup.py install

配置Nginx.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/usr/local/nginx/conf/nginx .conf】
server{
     listen 80;
     server_name www.mykurol.com;
         
     location / {
         uwsgi_pass 127.0.0.1:9001;
         include uwsgi_params;
         uwsgi_param UWSGI_CHDIR  /data/www/board ;
         uwsgi_param UWSGI_SCRIPT django_wsgi;
         access_log off;
}
         
     location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt| tar |mid|midi|wav|rtf|mpeg)$ {
         root  /data/www/board/static ;
         access_log off;
     }
}

配置uwsgi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/usr/local/nginx/conf/uwsgi .ini】
[uwsgi]
socket = 0.0.0.0:9001
master =  true
pidfile =  /usr/local/nginx/uwsgi .pid
processes = 8
chdir =  /data/www/board
pythonpath =  /data/www
profiler =  true
memory-report =  true
enable -threads =  true
logdate =  true
limit-as = 6048
daemonize =  /data/logs/django .log

启动项目board

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
[root@kurol logs] # cd /data/www/
[root@kurol www] # django-admin.py startproject board
[root@kurol www] # cd board/
[root@kurol board] # vim django_wsgi.py
#!/usr/bin python
# coding: utf-8
import  os
import  sys
reload(sys)
sys.setdefaultencoding( 'utf8' )
os.environ.setdefault( "DJANGO_SETTINGS_MODULE" "board.settings" )
from django.core.handlers.wsgi  import  WSGIHandler
application = WSGIHandler()
[root@kurol www] # ls
board
[root@kurol www] # tree
.
`-- board
     |-- board
     |   |-- __init__.py
     |   |-- settings.py
     |   |-- urls.py
     |   `-- wsgi.py
     `-- manage.py
2 directories, 5 files

启动uwsgi和nginx服务.,其中uwsgi使用自定义位置配置文件

1
2
3
4
5
6
7
8
9
10
11
12
[root@kurol ~] # /usr/bin/uwsgi --ini /usr/local/nginx/conf/uwsgi.ini 
/usr/bin/uwsgi : error  while  loading shared libraries: libpcre.so.1: cannot  open  shared object  file : No such  file  or directory
[root@kurol ~] # ln -s /usr/local/lib/libpcre.so.1 /lib64
[root@kurol ~] # /usr/bin/uwsgi --ini /usr/local/nginx/conf/uwsgi.ini 
[root@kurol ~] # /usr/local/nginx/sbin/nginx
[root@kurol ~] # netstat -ltunp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID /Program  name   
tcp        0      0 0.0.0.0:9001                0.0.0.0:*                   LISTEN      15243 /uwsgi         
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      15423 /nginx         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      868 /sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      957 /master

方便服务管理,创建nginx和uwsgi启动脚本.

nginx:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@kurol board] # touch /etc/init.d/nginx
[root@kurol board] # chmod 775 /etc/init.d/nginx
[root@kurol board] # vim /etc/init.d/nginx
#!/bin/sh
        #
        set  -e
        PATH= /usr/local/sbin : /usr/local/bin : /sbin : /bin : /usr/sbin : /usr/bin
        DESC= "nginx daemon"
        NAME=nginx
        DAEMON= /usr/local/nginx/sbin/nginx 
        CONFIGFILE= /usr/local/nginx/conf/nginx .conf
        PIDFILE= /usr/local/nginx/logs/nginx .pid
        SCRIPTNAME= /etc/init .d /nginx
         
        # If the daemon file is not found, terminate the script.
        test  -x $DAEMON ||  exit  0
        d_start(){
            $DAEMON -c $CONFIGFILE ||  echo  -n  " already running"
        }
        d_stop(){
            kill  -QUIT ` cat  $PIDFILE` ||  echo  -n  " no running"
        }
        d_reload(){
            kill  -HUP ` cat  $PIDFILE` ||  echo  -n  " could not reload"
        }
        case  "$1"  in
            start)
                echo  -n  "Starting $DESC: $NAME"
                d_start
                echo  "."
                ;;
            stop)
                echo  -n  "Stopping $DESC: $NAME"
                d_stop
                echo  "."
                ;;
            reload)
                echo  -n  "Reloading $DESC configuration..."
                d_reload
                echo  "Reloaded."
                ;;
            restart)
                echo  -n  "Restarting $DESC: $NAME"
                d_stop
                # Sleep for two seconds before starting again, this should give the nginx daemon some time to perform a graceful stop
                sleep  2
                d_start
                echo  "."
                ;;
            *)
                echo  "Usage: $SCRIPTNAME {start|stop|restart|force-reload)"  >&2
                exit  3
                ;;
        esac
        exit  0

uwsgi:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@kurol board] # touch /etc/init.d/uwsgi
[root@kurol board] # chmod 775 /etc/init.d/uwsgi
[root@kurol board] # vim /etc/init.d/uwsgi
#!/bin/sh
        #
        set  -e
        PATH= /usr/local/sbin : /usr/local/bin : /sbin : /bin : /usr/sbin : /usr/bin
        DESC= "uwsgi daemon"
        NAME=uwsgi
        DAEMON= /usr/bin/uwsgi 
        CONFIGFILE= /usr/local/nginx/conf/uwsgi .ini
        PIDFILE= /usr/local/nginx/uwsgi .pid
        SCRIPTNAME= /etc/init .d /uwsgi
         
        # If the daemon file is not found, terminate the script.
        test  -x $DAEMON ||  exit  0
        d_start(){
            $DAEMON --ini $CONFIGFILE ||  echo  -n  " already running"
        }
        d_stop(){
            kill  -QUIT ` cat  $PIDFILE` ||  echo  -n  " no running"
        }
        d_reload(){
            kill  -HUP ` cat  $PIDFILE` ||  echo  -n  " could not reload"
        }
        case  "$1"  in
            start)
                echo  -n  "Starting $DESC: $NAME"
                d_start
                echo  "."
                ;;
            stop)
                echo  -n  "Stopping $DESC: $NAME"
                d_stop
                echo  "."
                ;;
            reload)
                echo  -n  "Reloading $DESC configuration..."
                d_reload
                echo  "Reloaded."
                ;;
            restart)
                echo  -n  "Restarting $DESC: $NAME"
                d_stop
                # Sleep for two seconds before starting again, this should give the nginx daemon some time to perform a graceful stop
                sleep  2
                d_start
                echo  "."
                ;;
            *)
                echo  "Usage: $SCRIPTNAME {start|stop|restart|force-reload)"  >&2
                exit  3
                ;;
        esac
        exit  0

创建数据模型:

1
2
[root@kurol board] # cd /data/www/board/webserver/
[root@kurol webserver] # vim models.py

1
2
3
4
5
6
7
8
9
10
from  django.db  import  models
class  webserver(models.Model):
username  =  models.CharField( '用户名' ,max_length = 30 )
password  =  models.CharField( '密码' ,max_length = 30 )
email  =  models.EmailField( '电子邮件' ,blank = True )
desc  =  models.TextField( '描述' ,max_length = 500 ,blank = True )
class  Meta:
         db_table  =  u 'board_webserver'
def  __unicode__( self ):
return  self .username

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@kurol webserver] # vim /data/www/board/board/settings.py
DATABASES = {
     'default' : {
         'ENGINE' 'django.db.backends.mysql' # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
         'NAME' 'OBServer' ,                       # Or path to database file if using sqlite3.
         'USER' 'root' ,                       # Not used with sqlite3.
         'PASSWORD' '******' ,                   # Not used with sqlite3.
         'HOST' '' ,                       # Set to empty string for localhost. Not used with sqlite3.
         'PORT' '' ,                       # Set to empty string for default. Not used with sqlite3.
     }    
}  
INSTALLED_APPS = (
     'django.contrib.auth' ,
     'django.contrib.contenttypes' ,
     'django.contrib.sessions' ,
     'django.contrib.sites' ,
     'django.contrib.messages' ,
     'django.contrib.staticfiles' ,
     'webserver' ,
     # Uncomment the next line to enable the admin:
     # 'django.contrib.admin',
     # Uncomment the next line to enable admin documentation:
     # 'django.contrib.admindocs',
)

1
2
3
4
5
6
7
8
9
10
11
12
[root@kurol board] # export LC_ALL=en_US.UTF-8
[root@kurol board] # python manage.py sqlall webserver    #检查sql语句
BEGIN;
CREATE TABLE `board_webserver` (
     ` id ` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
     `username` varchar(30) NOT NULL,
     `password` varchar(30) NOT NULL,
     `email` varchar(75) NOT NULL,
     `desc` longtext NOT NULL
)
;
COMMIT;

SQL语句没问题,继续执行

#在Django 1.9及未来的版本种使用migrate代替syscdb.

syncdb会创建在setting.py下配置的INSTALL_APPS下的所有app,创建其对应的数据表到指定的数据库,但只创建不存在的表比如上面

1
2
3
4
5
6
7
         'django.contrib.auth' ,
     'django.contrib.contenttypes' ,
     'django.contrib.sessions' ,
     'django.contrib.sites' ,
     'django.contrib.messages' ,
     'django.contrib.staticfiles' ,
     'webserver' ,

都会创建一个对应的表。

1
2
3
4
5
6
[root@kurol board] # python manage.py syncdb          
Creating tables ...
Creating table board_webserver
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

报错问题

[root@kurol board]# python manage.py syncdb

TypeError: decode() argument 1 must be string, not None

解决:

将export LC_ALL=en_US.UTF-8写入到profile或者.bashrc中即可。

[root@kurol board]# export LC_ALL=en_US.UTF-8

生成应用,修改urls指定页面,添加views视图

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
[root@kurol webserver] # cd /data/www/board/
[root@kurol board] # python manage.py startapp webserver
[root@kurol board] # vim board/urls.py
from django.conf.urls  import  patterns, include, url
urlpatterns = patterns( '' ,
     (r '^$' 'board.views.index' ),
     (r '^board/' , include( 'webserver.urls' )),
)
[root@kurol board] # cd webserver/
[root@kurol webserver] # touch urls.py
[root@kurol webserver] # vim urls.py
from  django.conf.urls.defaults  import  *
urlpatterns = patterns( '' ,
     (r '^$' 'webserver.views.index' ),
     (r '^random_number/$' 'webserver.views.random_number' ),
)
[root@kurol webserver] # cd ..
[root@kurol board] # cd board
[root@kurol board] # vim views.py
# Create your views here.
from django.http  import  HttpResponse
def index(request):
     html =  "" "<html>
                 <title>Main< /title >
                 <body>
                     <h1>Main Page< /h1 ><hr>
                 < /body >
               < /html > "" "
     return  HttpResponse(html)

浏览器打开,显示Main Page就是成功部署了。

本文转自谢育政 51CTO博客,原文链接:http://blog.51cto.com/kurolz/1935013,如需转载请自行联系原作者

Nginx + uWSGI + Python + Django部署实例相关推荐

  1. Nginx + uWSGI + Python + Django构建必应高清壁纸站

    写在前面 做这个网站的初衷是因为,每次打开必应搜索搜东西的时候都会被上面的背景图片吸引,我想必应的壁纸应该是经过专业人员精选出来的,我甚至会翻看以前的历史图片,唯一美中不足的是必应的首页只能查看最多7 ...

  2. Nginx + uWSGI + Python + Django搭建一款只属于自己的壁纸网站

    写在前面 做这个网站的初衷是因为,每次打开必应搜索搜东西的时候都会被上面的背景图片吸引,我想必应的壁纸应该是经过专业人员精选出来的,我甚至会翻看以前的历史图片,唯一美中不足的是必应的首页只能查看最多7 ...

  3. Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

    转载 Nginx+uwsgi+celery+supervisor部署Django前后端分离项目 ljmict 0人评论 3887人阅读 2018-08-08 01:29:45 本实验实现了负载均衡.反 ...

  4. CentOS6.5_64下 nginx+uwsgi+Python +多站点环境搭建

    本文章为各位介绍一篇关于CentOS6.5_64下 nginx+uwsgi+Python +多站点环境搭建 python web django 框架的例子. 作为一个严谨(其实就是有强迫症)的程序,为 ...

  5. Nginx + uWSGI + flask + socketio 部署解决方案

    Nginx + uWSGI + flask + socketio 部署解决方案 参考文章: (1)Nginx + uWSGI + flask + socketio 部署解决方案 (2)https:// ...

  6. python django部署docker_Docker 部署 Django+Uwsgi+Nginx+Vue

    简介 * 1.两年前接触docker是因为要部署selenium_gird,后来呢发现zalenium可以录制ui自动化视频的工具,都是直接pull镜像,启动容器.所以一直以来就只用到了pull. r ...

  7. nginx+uwsgi负载均衡部署django项目

    uwsgi介绍 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI / u ...

  8. CentOS+Nginx+uWSGI+Python多站点环境搭建

    /usr/lib/python2.7/site-packages/django/bin/django-admin.py  startproject myweb 但是又看了一下uwsgi 的官方文档,发 ...

  9. python django部署docker_如何Docker化Python Django应用程序

    Docker是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. Django 是一个用 ...

最新文章

  1. android文本自动添加图片格式,Android中多行文本末尾添加图片排版问题的解决方法...
  2. windbg拦截驱动
  3. 关于设计模式--我有话说
  4. 假日教程-ZStack映像檔系列(TurnkeyLinux Observium)
  5. 第8部分 管理磁盘存储
  6. std::atomic和std::mutex区别
  7. 16c语言第七届省赛,第十二届全国青少年信息学奥林匹克联赛初赛试题及答案普及组、C语言...
  8. KingDZ 变菜鸟,每日一个C#小实例之---玩转鼠标
  9. 理解 Delphi 的类(十一) - 深入类中的方法[12] - 消息方法
  10. ArcGIS 城市生活区用地适宜性评价(三)
  11. 用python 控制台打印图片示例
  12. android相机固定焦距,android Camera 设置焦距
  13. 新手都能用到的140个电脑技巧
  14. php半透明,php水印代码,php半透明水印支持png透明背景
  15. RHEL5/6 加载 DVD yum源
  16. 前端性能优化之优化图片
  17. Winter Camp I (下)
  18. STM32 LoRa无线数传模块 PC通过串口传输数据到单片机
  19. 全靠这份阿里P5-P9知识核心手册+10W字面试题总结,让我在22岁月薪35k!
  20. iOS PerformSelector 遗漏问题

热门文章

  1. mysql几种常用的方法
  2. 数据库入门教程(SQL Server 2005)----数据库是如何查询数据的
  3. 【Java】JMM梳理
  4. Android默认系统声音/大小修改及配置
  5. Netty之ByteBuf详解
  6. 大学生自我鉴定 范文2
  7. C# for循环与foreach循环
  8. 《狄兰·托马斯诗选》(Do not go gentle into that good night)
  9. Java毕设项目桌游店会员管理系统(java+VUE+Mybatis+Maven+Mysql)
  10. 分享一些自己的学习方法