【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。
温馨提示:
l 本文纯干货,文字和代码居多,且适合零基础Laravel学习者;
l 本文会新建一个名为 blog 的 Laravel 程序,这是一个非常简单的博客。
l 欢迎随时关注ThinkSNS+的研发动态,有产品问题、优化建议、售前咨询、售后咨询、技术支持都可以咨询QQ:3515923610,手机:19934627031(同微信)。
本文主要内容:
· 新建 Laravel 程序,如何连接数据库;
· Laravel 程序的基本文件结构;
· MVC(模型,视图,控制器)和 REST 架构的基本原理;
· 如何快速生成 Laravel 程序骨架;
学习Laravel前提:你必须是会PHP语言的程序技术人员,否则,应先学习PHP语言,再学习laravel框架,最后,才能上手社交系统ThinkSNS+的二次开发,以下是可能使用到的资源:
· PHP 5.4 及以上版本
· 包管理工具 Composer。Composer指南官网:https://getcomposer.org/ , 中文网:http://www.phpcomposer.com/
· SQLite3 数据库
· PHP 语言官方网站: http://php.net/
一、新建 Laravel 程序
文中的示例代码使用 $ 表示命令行提示符,你的提示符可能修改过,所以会不一样。在 Windows 中,提示符可能是 c:\source_code>。
1、安装 Laravel
打开命令行,跟着以下步骤执行下文中所有以 $ 开头的代码命令。
l 先确认是否安装了 PHP 5.4 或者以上的版本:
如果你还没安装 PHP,请访问 http://php.net/ ,先安装PHP。
l 然后,确认是否在 PATH 中:
$ sqlite3 --version
l 安装 Laravel , 通过 Laravel 安装器
首先, 使用 Composer 全局下载并安装 Laravel/installer:
$ composer global require "laravel/installer=~1.1"
安装并且配置成功后, 可以使用命令 laravel new 在您指定的目录下创建一份全新安装的 Laravel 应用, 如这样的调用: laravel new blog 将会在当前目录下创建一个叫 blog 的目录。
Laravel 框架使用 composer 来执行安装及管理依赖。如果还没有安装它的话,请先从安装 Composer 开始吧。
安装Composer之后,您可以通过终端执行下列命令来安装 Laravel:
$ composer create-project laravel/laravel your-project-name --prefer-dist
这个命令会下载并安装一份全新的 Laravel 存放在指定的 your-project-name 的目录中。
2、创建 Blog 程序
Artisan 是 Laravel 内建的命令行工具,它提供了一些有用的命令协助您开发,它是由强大的 Symfony Console 组件所驱动。
l 打开终端,进入有写权限的文件夹,生成一个新程序:
$ laravel new blog
或者
$ composer create-project laravel/laravel blog --prefer-dist
这个命令会在文件夹 blog 中新建一个 Laravel 程序。
执行 laravel new -h 可以查看新程序生成器的所有命令行选项。
l 生成 blog 程序后,进入该文件夹:
$ cd blog
blog 文件夹中有很多自动生成的文件和文件夹,组成一个 Laravel 程序。
二、Hello, Laravel!
首先,我们来添加一些文字,在页面中显示。为了能访问网页,要启动程序服务器。
$ php artisan serve
上述命令会启动 PHP 内建的开发服务器,要查看程序,请打开一个浏览器窗口,访问http://localhost:8000 。应该会看到默认的 Laravel 信息页面:
要想停止服务器,请在命令行中按 Ctrl+C 键。服务器成功停止后回重新看到命令行提示符。在大多数类 Unix 系统中,包括 Mac OS X,命令行提示符是 $ 符号。
1、显示“Hello, Laravel!”
要在 Laravel 中显示“Hello, Laravel!”,需要新建一个控制器和视图。
l 创建控制器
控制器可用控制器生成器创建,你要告诉生成器,我想要个名为“welcome”的控制器,如下所示:
$ php artisan controller:make WelcomeController --only=index
运行上述命令后,Laravel 会生成 app/controllers/WelcomeController.php 文件。生成文件后修改其中的 index 方法:
l 创建视图:
在 app/views/ 目录新建文件夹 welcome 并创建文件 index.blade.php ;
在 index.blade.php 文件中添加
Hello, Laravel! ;
2、设置程序的首页
我们已经创建了控制器和视图,现在要告诉 Laravel 在哪个地址上显示“Hello, Laravel!”。这里,我们希望访问根地址 http://localhost:8000 时显示。但是现在显示的还是欢迎页面。
我们要告诉 Laravel 真正的首页是什么。
在编辑器中打开 app/routes.php 文件。
我们找到 :
Route::get('/', function()
{
return View::make('hello');
});
修改为:
Route::get('/', 'WelcomeController@index');
告知 Laravel,访问程序的根路径时,交给 welcome 控制器中的 index 动作处理。
三、开始使用
前文已经介绍如何创建控制器、动作和视图,下面我们来创建一些更实质的功能。
在此之前我们需要修改一些配置:
· app/config/app.php 文件中的 debug 选项设置为 true (注:开启开发模式,更友好的开发提示);
· app/config/database.php 文件中的 default 选项设置为 sqlite (注:我们之前选择 sqlite 作为默认数据库);
在博客程序中,我们要创建一些对象资源,比如文章,人和动物,可以被创建、读取、更新和删除,这些操作简称 CRUD。
Laravel 提供了资源控制器可以简单的建立跟资源相关的 RESTful 控制器。 创建文章资源后,app/routes.php 文件的内容新增如下:
Route::resource('articles', 'ArticlesController');
执行 $ php artisan routes 任务,会看到定义了所有标准的 REST 动作。输出结果中各列的意义稍后会说明。
下一节,我们会加入新建文章和查看文章的功能。这两个操作分别对应于 CRUD 的 C 和 R,即创建和读取。
1、挖地基
首先,程序中要有个页面用来新建文章。一个比较好的选择是 /articles/create。这个路由前面已经定义了,可以访问。打开 http://localhost:8000/articles/create ,会看到如下的路由错误:
产生这个错误的原因是,没有定义用来处理该请求的控制器。解决这个问题的方法很简单:创建名为 ArticlesController 的控制器。执行下面的命令即可:
$ php artisan controller:make ArticlesController
打开刚生成的 app/controllers/ArticlesController.php 文件,控制器就是一个类,继承自 BaseController。在这个 ArticlesController 类中定义了对应的资源动作。动作的作用是处理文章的 CRUD 操作。
修改 ArticlesController.php 文件中的
public function create()
{
//
}
为
public function create()
{
return View::make('articles.create');
}
在 PHP 中,方法分为 public、private 和 protected 三种,只有 public 方法才能作为控制器的动作。
现在刷新 http://localhost:8000/articles/create ,会看到一个新错误:
产生这个错误的原因是,Laravel 希望这样的常规动作有对应的视图,用来显示内容。没有视图可用,Laravel 就报错了。
新建文件 app/views/articles/create.blade.php,写入如下代码:
New Article
再次刷新 http://localhost:8000/articles/create , 可以看到页面中显示了一个标头。现在路由、控制器、动作和视图都能正常运行了。接下来要编写新建文章的表单了。
2、首个表单
要在模板中编写表单,可以使用“表单构造器”。Laravel 中常用的表单构造器是 Form。在 app/views/articles/create.blade.php 文件中加入以下代码:
现在刷新页面,会看到上述代码生成的表单。在 Laravel 中编写表单就是这么简单!
在 Form 方法的块中,Form::text 创建了两个标签和两个文本字段,一个用于文章标题,一个用于文章内容。最后,Form::submit 创建一个提交按钮。
修改 app/views/articles/create.blade.php 文件中的 Form::open,改成这样:
{{ Form::open(array('url' => 'articles')) }}
这里,我们把 url 参数的值设为 articles 。对应的地址是 /articels,默认情况下,这个表单会向这个路由发起 POST 请求。这个路由对应于 ArticlesController 控制器的 store 动作。
表单写好了,路由也定义了,现在可以填写表单,然后点击提交按钮新建文章了。
3、创建文章
提交表单,会看到一个白屏。现在暂且不管这个错误。store 动作的作用是把新文章保存到数据库中。
提交表单后,其中的字段以参数的形式传递给 Laravel。这些参数可以在控制器的动作中使用,完成指定的操作。要想查看这些参数的内容,可以把 store 动作改成:
public function store()
{
dd(Input::all());
}
dd 函数为 Laravel 内置的打印输出函数,Input::all() 取得所有发出请求时传入的输入数据。
如果现在再次提交表单,不会再看到白屏错误,而是会看到类似下面的文字:
store 动作把表单提交的参数显示出来了。不过这么做没什么用,看到了参数又怎样,什么都没发生。
4、创建 Article 模型
在 Laravel 中,模型的名字使用单数,对应的数据表名使用复数。
创建 app/models/Article.php 并写入以下代码:
注意我们并没有告诉 Eloquent Article 模型会使用哪个数据库表。若没有特别指定,系统会默认自动对应名称为「类名称的小写复数形态」的数据库表。所以,在上面的例子中, Eloquent 会假设 Article 将把数据存在 articles 数据库表。
5、运行迁移
使用 Artisan CLI 的 migrate:make 命令建立迁移文件:
$ php artisan migrate:make create_articles_table --create=articles
迁移文件会建立在 app/database/migrations 目录下,文件名会包含时间戳,用于在执行迁移时用来决定顺序。
app/database/migrations/20140903084339createarticlestable.php (你的迁移文件名可能有点不一样)文件的内容如下所示:
修改其中的创建代码为:
在这个迁移中定义了一个名为 up 的方法,在运行迁移时执行。up 方法中定义的操作都是可以通过 down 方法实现可逆的,Laravel 知道如何撤销这次迁移操作。运行迁移后,会创建 articles 表,以及一个字符串字段和文本字段。同时还会创建两个时间戳字段,用来跟踪记录的创建时间和更新时间。
然后,使用 Artisan 命令运行迁移:
$ php artisan migrate
Laravel 会执行迁移操作,告诉你创建了 articles 表。
Migration table created successfully. Migrated: 20140903084339createarticlestable
6、在控制器中保存数据
再回到 ArticlesController 控制器,我们要修改 store 动作,使用 Article 模型把数据保存到数据库中。打开 app/controllers/ArticlesController.php 文件,把 store 动作修改成这样:
同时在 app/models/Article.php 添加 :
protected $fillable = array('title', 'text');
fillable 属性允许在动作中调用模型的 create 方法使用 title 和 text 属性。
再次访问 http://localhost:8000/articles/create ,填写表单,还差一步就能创建文章了。
7、显示文章
和前面一样,我们要在 app/controllers/ArticlesController.php 文件中更改 show 动作,以及相应的视图文件。
然后,新建 app/views/articles/show.blade.php 文件,写入下面的代码:
做了以上修改后,就能真正的新建文章了。访问 http://localhost:8000/articles/create ,自己试试。
8、列出所有文章
我们还要列出所有文章,对应的路由是:
GET|HEAD articles | articles.index | ArticlesController@index
在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 index 动作:
然后编写这个动作的视图,保存为 app/views/articles/index.blade.php:
现在访问 http://localhost:8000/articles ,会看到已经发布的文章列表。
9、添加链接
至此,我们可以新建、显示、列出文章了。下面我们添加一些链接,指向这些页面。
打开 app/views/welcome/index.blade.php 文件,添加:
{{ link_to_route('articles.index', 'My Blog') }}
linktoroute 是 Laravel 内置的视图帮助方法之一,根据提供的文本和地址创建超链接。这上面这段代码中,地址是文章列表页面。
接下来添加到其他页面的链接。先在 app/views/articles/index.blade.php 中添加“New Article”链接,放在
标签之前:
{{ link_to_route('articles.create', 'New article') }}
点击这个链接后,会转向新建文章的表单页面。
然后在 app/views/articles/create.blade.php 中添加一个链接,位于表单下面,返回到 index 动作:
{{ link_to_route('articles.index', 'Back') }}
最后,在 app/views/articles/show.blade.php 模板中添加一个链接,返回 index 动作,这样用户查看某篇文章后就可以返回文章列表页面了:
{{ link_to_route('articles.index', 'Back') }}
10、添加数据验证
在 app/controllers/ArticlesController.php 文件中,修改 ArticlesController 控制器 store 动作:
然后修改 app/views/articles/create.blade.php 添加 :
再次访问 http://localhost:8000/articles/create ,尝试发布一篇没有标题的文章,会看到一个很有用的错误提示。
11、更新文章
我们已经说明了 CRUD 中的 CR 两种操作。下面进入 U 部分,更新文章。
首先,要在 ArticlesController 中更改 edit 动作:
视图中要添加一个类似新建文章的表单。新建 app/views/articles/edit.blade.php 文件,写入下面的代码:
这里的表单指向 update 动作
method: put ( patch ) 选项告诉 Laravel,提交这个表单时使用 PUT 方法发送请求。根据 REST 架构,更新资源时要使用 HTTP PUT 方法。
然后,要在 app/controllers/ArticlesController.php 中更新 update 动作:
最后,我们想在文章列表页面,在每篇文章后面都加上一个链接,指向 edit 动作。打开 app/views/articles/index.blade.php 文件,在“Show”链接后面添加“Edit”链接:
我们还要在 app/views/articles/show.blade.php 模板的底部加上“Edit”链接:
{{ link_to_route('articles.index', 'Back') }} |{{ link_to_route('articles.edit', 'Edit', $article->id) }}
12、使用局部视图去掉视图中的重复代码
下面使用局部视图去掉两个视图中的重复代码。
新建 app/views/notifications.blade.php 文件,写入以下代码:
下面来修改 app/views/articles/creat.blade.php 和 edit.blade.php 视图,使用新建的局部视图,把其中的上面代码全删掉,替换成:
@include('notifications')
13、删除文章
现在介绍 CRUD 中的 D,从数据库中删除文章。按照 REST 架构的约定,删除文章的路由是:
DELETE articles/{articles} | articles.destroy | ArticlesController@destroy
删除资源时使用 DELETE 请求。如果还使用 GET 请求,可以构建如下所示的恶意地址:
look at this cat!
删除资源使用 DELETE 方法,路由会把请求发往 app/controllers/ArticlesController.php 中的 destroy 动作。修改 destroy 动作:
想把记录从数据库删除,可以在模型对象上调用 destroy 方法。最后,在 index 动作的模板(app/views/articles/index.blade.php)中加上“Destroy”链接:
恭喜,现在你可以新建、显示、列出、更新、删除文章了,完成了Laravel的第一次实践,祝您早日适应ThinkSNS+的技术框架,更多内容,请访问www.thinksns.com
你可能感兴趣的:(Laravel入门及实践,快速上手ThinkSNS+二次开发)
基于ChatGPT、GIS与Python机器学习的地质灾害风险评估、易发性分析、信息化建库及灾后重建高级实践
weixin_贾
防洪评价 风险评估 滑坡 泥石流 地质灾害
第一章、ChatGPT、DeepSeek大语言模型提示词与地质灾害基础及平台介绍【基础实践篇】1、什么是大模型?大模型(LargeLanguageModel,LLM)是一种基于深度学习技术的大规模自然语言处理模型。代表性大模型:GPT-4、BERT、T5、ChatGPT等。特点:多任务能力:可以完成文本生成、分类、翻译、问答等任务。上下文理解:能理解复杂的上下文信息。广泛适配性:适合科研、教育、行
golang面经整理(一)(k8s,docker二次开发方向,云原生方向)
gooooer
1024程序员节
笔者在2022年7月份-9月份之间面试了很多golang和k8s相关的面试,主要想从事云原生相关的开发工作,大小公司面试了很多,现将整体面试感受和一些通用的问题做一些整理记录,帮助大家在面试的时候更好的进行准备。最近大环境不好,大厂的岗位也少了不少。主要投递的岗位包含广州、深圳的岗位,面试的是golang工程师相关的岗位,但其实单纯做云原生相关岗位比较少,基本上局限于国内的几朵云,阿里云,华为云,
拥抱健康养生,畅享美好生活
lanlande33
生活
在快节奏的现代生活中,健康养生已成为我们追求高品质生活的关键。它并非遥不可及的高深学问,而是融入在日常的点点滴滴,是一种积极的生活态度,能让我们身心愉悦,活力满满。合理饮食是健康养生的基石。多吃新鲜蔬果,它们富含维生素、矿物质与膳食纤维,像橙子能提供丰富维C,增强免疫力;芹菜则促进肠道蠕动,预防便秘。粗粮也不可少,燕麦、糙米等能缓慢释放能量,让我们保持充沛精力。减少高油高糖高盐食物的摄入,炸鸡、蛋
DeepSeek的崛起:2025新春国产AI模型的全球影响力
耶耶Norsea
网络杂烩 人工智能 百度
摘要在2025年新春之际,国产AI模型DeepSeek以现象级的姿态迅速崛起,凭借免费、易用及高性能的特点,吸引了全球科技界的广泛关注。这款大型人工智能模型不仅展现了国产技术的实力,还为用户提供了高效便捷的使用体验,成为行业内的焦点。关键词DeepSeek崛起,2025新春,国产AI模型,免费易用,高性能特点一、国产AI的崭新篇章1.1DeepSeek的诞生背景在2025年新春之际,DeepSee
通过 Kibana 操作 Elasticsearch:从入门到实践
格子先生Lab
elasticsearch 大数据 搜索引擎
引言Kibana是Elasticsearch的可视化工具,提供了一个用户友好的界面来管理和操作Elasticsearch中的数据。通过Kibana,你可以轻松地执行数据搜索、创建可视化图表、构建仪表盘等操作。本文将带你从零开始学习如何通过Kibana操作Elasticsearch,掌握其基本功能和进阶操作。1.Kibana简介1.1什么是Kibana?Kibana是一个开源的数据可视化工具,专为E
深度解析大模型推理框架:原理、应用与实践
百度_开发者中心
人工智能 大模型 自然语言处理
在当今数据驱动的时代,大模型推理框架已经成为人工智能领域的重要支柱。本文将通过简明扼要、清晰易懂的方式,带领读者深入了解大模型推理框架的原理、应用领域和实践经验,帮助读者更好地掌握这一技术,并在实际工作中发挥其价值。一、大模型推理框架简介大模型推理框架是指一种基于深度学习技术的推理框架,主要用于解决大规模数据集下的复杂问题。该框架通过对海量数据进行高效的训练和推理,能够快速地对各种复杂场景进行分析
大模型推理框架:从理论到实践的全面解析
百度_开发者中心
人工智能 大模型 自然语言处理
在数据驱动的时代,深度学习技术已经渗透到各个行业,从图像识别到自然语言处理,从推荐系统到智能客服,其应用无处不在。然而,深度学习模型的训练和推理过程往往涉及大量数据和复杂计算,传统的计算框架难以满足需求。因此,大模型推理框架应运而生,成为解决这一问题的关键。一、大模型推理框架基本概念大模型推理框架是一种基于深度学习技术的推理框架,它通过对海量数据进行高效的训练和推理,能够快速地对各种复杂场景进行分
nvidia系列教程-AGX-Orin系统刷机及备份
flypig哗啦啦
nvidia nvidia AGX-Orin
目录前言一、准备工作二、AGXOrin系统刷机步骤三、AGXOrin系统备份总结前言NVIDIAAGXOrin是一款高性能的嵌入式计算平台,专为边缘计算和AI应用而设计。为了确保系统的稳定性和适应不同的应用场景,用户可能需要对AGXOrin进行系统刷机和备份操作。本文将详细介绍如何完成这些操作,帮助您更好地管理和维护AGXOrin设备。一、准备工作在开始刷机和备份之前,请确保您已经准备好以下工具和
人脸识别的一些代码
饿了就干饭
CV相关 人脸识别
1、cv2入门函数imread及其相关操作2、(详解)opencv里的cv2.resize改变图片大小Python3、机器学习之人脸识别face_recognition使用4、使用face_recognition进行人脸校准5、简单的人脸识别通用流程示意图(这个看着写的挺好的)6、face_recognition和图像处理中left、top、right、bottom解释7、使用pillow库对图片
Nginx 在 Ubuntu 上的安装与配置指南
一回生二回熟
Ubuntu nginx ubuntu 运维
Nginx在Ubuntu上的安装与配置指南Ubuntu的软件管理工具已经提供了Nginx的安装包,如果不需要借助Docker等其他容器化工具对Nginx进行管理,可以直接通过Ubuntu自带的软件管理工具轻松安装Nginx。本指南将详细介绍Nginx的安装过程、安装后的检查方法、服务的管理以及基本的配置步骤,帮助你快速上手并正确使用Nginx。1.安装Nginx安装Nginx非常简单,只需使用以下
Python从入门到精通的系统性学习路径
niuTaylor
编程区 python 学习 开发语言
Python从入门到精通的系统性学习路径一、基础语法快速突破1.变量与基础操作#动态类型演示a=10#整型a=3.14#浮点型a="Python"#字符串a=[1,2,3]#列表#格式化输出进阶name="Alice"print(f"{name:*^20}")#居中填充输出:******Alice*******2.运算符优先级实战#常见运算符优先级练习result=5+3*2**2//(4%3)p
Python技术全景解析:从基础到前沿的深度探索
靠近彗星
python 开发语言 性能优化 个人开发 极限编程
目录一、Python为何成为开发者首选?1.核心优势矩阵2.性能进化史二、Python核心应用领域1.数据科学黄金三角2.AI开发新范式三、现代Python进阶技巧1.类型提示革命2.异步编程实战四、Python工程化实践1.现代项目架构2.性能优化矩阵五、Python未来生态展望1.前沿技术融合2.性能革命六、学习路线图1.技能成长路径基础阶段(1-3月)专业方向(3-6月)深度进阶(6-12月
破界融合!北京首家AI+新材料全流程智能实验室落地沙河高教园
人工智能
破界融合!北京首家AI+新材料全流程智能实验室落地沙河高教园3月21日上午,沙河高教园区AI+新材料合成校企联合实验室揭牌仪式在新元科技园区成功举办。昌平区副区长高阳,市科委、中关村管委会新材料与智能制造科技处,市经信局,未来城管委会校城融合处、沙河镇、昌发展等相关部门负责人及高校、科研院所、企业代表出席。“沙河高教园区AI+新材料合成校企联合实验室”揭牌仪式AI+新材料合成校企联合实验室位于新元
S32K144入门笔记(二十):eDMA的API函数解读
上层精灵的赞美诗
S32K144入门笔记系列 单片机 嵌入式硬件 eclipse mcu 笔记
文章目录1.SDK中的函数2.API函数的释义1.SDK中的函数在SDK中并没有转为PDB设置专门的PAL驱动,在基本的DRIVER库中一共有32个API函数,本文将解读这些函数的功能。2.API函数的释义status_tEDMA_DRV_Init(edma_state_t*edmaState,constedma_user_config_t*userConfig,edma_chn_state_t*
PHP 超级全局变量
lsx202406
开发语言
PHP超级全局变量引言在PHP编程中,超级全局变量是一个非常重要的概念。它们在所有函数、类和文件中自动可用,无需使用global关键字。理解并正确使用超级全局变量对于编写高效、安全的PHP代码至关重要。本文将详细介绍PHP中的超级全局变量,包括它们的用途、如何使用以及一些最佳实践。什么是超级全局变量?超级全局变量是指在PHP脚本的所有函数、类和文件中都可以访问的全局变量。这些变量在全局作用域中声明
《南京日报》专题报道 | 耘瞳科技“工业之眼”加码“中国智造”
耘瞳科技
科技
在江宁开发区,机器人已不再是科幻电影里的遥远想象,他们就像人类的“同事”,在工地上忙着贴砖、刷墙、搬运、检测;在体育训练场上帮助运动员矫正姿势;在医院里帮助医生发现帕金森早期征兆,在智慧工厂里与人类分工协作……作为南京市机器人产业“一核多翼”布局的“核”,江宁开发区当前聚集人工智能产业核心及上下游关联企业超百家。近日,《南京日报》走访了多家链条上的“明星企业”,耘瞳科技作为中国领先的智能检测与测量
JavaScript 箭头函数使用总结及注意事项(适合新手到进阶)
我真聪明。
javascript 开发语言 ecmascript
箭头函数(=>)是ES6的核心特性之一,它简化了函数写法并改变了this的指向逻辑,但在使用时需要明确其适用场景和限制。以下是详细总结:一、箭头函数核心特点简洁语法://传统函数constadd=function(a,b){returna+b;};//箭头函数constadd=(a,b)=>a+b;//单行省略returnconstadd=(a,b)=>{returna+b;};//多行需显式re
Linux 上安装 PostgreSQL
lsx202406
开发语言
Linux上安装PostgreSQL引言PostgreSQL是一款功能强大、性能卓越的开源关系型数据库管理系统。它支持多种操作系统,包括Linux。本文将详细介绍如何在Linux系统上安装PostgreSQL,帮助您快速入门。准备工作在开始安装之前,请确保您的Linux系统满足以下条件:系统版本:Linux发行版,如Ubuntu、CentOS等。网络连接:确保您的系统可以访问互联网。用户权限:具有
计算机集成电板 ppt,史上最全,PCB板和集成电路解析(干货分享)
姚脑师
计算机集成电板 ppt
原标题:史上最全,PCB板和集成电路解析(干货分享)目前的电路板,主要由以下组成:线路与图面(Pattern):线路是做为原件之间导通的工具,在设计上会另外设计大铜面作为接地及电源层。线路与图面是同时做出的。介电层(Dielectric):用来保持线路及各层之间的绝缘性,俗称为基材。孔(Throughhole/via):导通孔可使两层次以上的线路彼此导通,较大的导通孔则做为零件插件用,另外有非导通
【架构设计】前置知识
GIS程序媛—椰子
架构设计 架构设计
架构设计是软件开发的进阶技能,需要结合理论知识和实践经验。以下是掌握架构设计所需的前置知识及其重要性,以及学习路径建议:一、基础编程能力1.编程语言与核心概念掌握至少一门主流语言(如Java、Python、C#、Go等),理解其语法、特性及生态。核心概念:面向对象(OOP)、函数式编程(FP)、并发/异步、内存管理等。示例:通过Java理解接口、多态、设计模式。通过Go学习并发模型(Gorouti
MongoDB
z小天才b
MongoDB mongodb 数据库
一、MongoDB简介1.1什么是MongoDB?MongoDB是一个基于分布式文件存储的开源NoSQL数据库系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值对组成,类似于JSON对象,字段值可以包含其他文档、数组及文档数组。1.2MongoDB的核心特性文档型数据库:数据以BSON(BinaryJSON)格式存储灵活的
算法刷题记录——LeetCode篇(1) [第1~100题](持续更新)
Allen Wurlitzer
实战-算法解题 算法 leetcode 职场和发展
更新时间:2025-03-21LeetCode刷题目录:算法刷题记录——专题目录汇总技术博客总目录:计算机技术系列博客——目录页优先整理热门100及面试150,不定期持续更新,欢迎关注!1.两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以
macos安装python-nodejs_MAC平台基于Python Appium环境搭建过程图解
weixin_39612038
前言最近笔者要为python+appium课程做准备,mac在2019年重新安装了一次系统,这次重新在mac下搭建appium环境,刚好顺带写个文稿给大家分享分享搭建过程。一、环境和所需软件概述1.1目前环境:MacOS(10.15.3)1.2所需软件:jdk-8u91-macosx-x64.dmg(jdk1.8及以上版本应该都可以)android-sdk_r24.4.1-macosx.zip(m
HarmonyOS Next 安全机制深度剖析
SameX-4869
harmonyos 华为
本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的安全机制相关技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。第一章:安全体系架构一、整体架构介绍HarmonyOSNext的安全体系架构犹如一座坚固的城堡,从多个层面为系统和应用提供全方位的保护。它
深入理解 Redis SDS:高效字符串存储的秘密
沉默的煎蛋
bootstrap 前端 html maven 架构 开发语言 数据库
目录1.引言1.1Redis中字符串的广泛应用2.SDS结构定义2.1Redis3.2之前的SDS结构2.2Redis3.2及之后的SDS结构3.SDS与传统C字符串的比较3.1获取字符串长度3.2缓冲区溢出问题3.3二进制安全性3.4内存分配次数4.SDS的内存分配策略4.1空间预分配4.2惰性空间释放5.SDS的其他特性5.1兼容C字符串函数5.2类型灵活6.SDS的使用场景6.1键值对存储6
前端面试
请叫我子鱼
编程语言 笔试面试 程序员 web interview
前端面试之道JS基础知识点及常考面试题原始(Primitive)类型面试题:原始类型有哪几种?null是对象嘛?在JS中,存在着6种原始值,分别是:booleannullundefinednumberstringsymbol首先原始类型存储的都是值,是没有函数可以调用的对象(Object)类型面试题:对象类型和原始类型的不同之处?函数参数是对象会发生什么问题?在JS中,除了原始类型那么其他的都是对
免费提供多样风格手机壁纸及自动更换功能的软件
开开心心就好
智能手机 tcp/ip macos 网络协议 android pdf python
在寻找手机壁纸时,要是能有一款软件,既免费又资源丰富,操作还简单方便,那可就太棒了。今天就给大家介绍这样一款软件——壁纸喵,它能满足你对手机壁纸的各种需求。壁纸喵是一款完全免费的手机壁纸软件,其壁纸资源极其丰富。不管你喜欢哪种风格和主题,无论是竖屏、横屏,还是追求高清品质的4K壁纸,在这里都能找到。各种风格应有尽有,从简约清新到华丽炫酷,从可爱萌系到酷炫科技,丰富的选择让你总能找到心仪的那一款。便
跟着黑马学MySQL基础篇笔记(1)-概述与SQL
小杜不吃糖
mysql 笔记 sql
03.安装与启动启动netstartmysql80netstopmysql80客户端连接mysql[-h127.0.0.1][-P3306]-uroot-p04.mysql数据模型关系型数据库RDBMS05.通用语法及分类DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)DML:数据操作语言,用来对数据库表中的数据进行增删改DQL:数据查询语言,用来查询数据库中表的记录DCL:数据控制语
Stacking算法:集成学习的终极武器
civilpy
算法 集成学习 机器学习
Stacking算法:集成学习的终极武器在机器学习的竞技场中,集成学习方法以其卓越的性能而闻名。其中,Stacking(堆叠泛化)作为一种高级集成技术,更是被誉为“集成学习的终极武器”。本文将带你深入了解Stacking算法的原理和实现,并提供一些实战技巧和最佳实践。1.Stacking算法原理探秘Stacking算法的核心思想是训练多个不同的基模型,并将它们的预测结果作为新模型的输入特征,以此来
cippe2025北京石油展,遨游通讯将携多款防爆手机亮相!
AORO_BEIDOU
智能手机 信息与通信 人工智能 安全 网络
在石油石化等危险作业场景,安全是生命线,智能化是未来发展的核心引擎。2025年3月26-28日,遨游通讯将携九重防爆标准及防爆手机、防爆对讲机、防爆平板等防爆智能终端,强势登陆第二十五届中国国际石油石化技术装备展览会(cippe)!诚邀您莅临E1馆E1159展位,共同见证安全与智能深度融合的革新力量!一、核心产品遨游通讯依托九重防爆标准,打造覆盖石油、石化全场景的防爆智能终端,为危险作业场景提供“
解读Servlet原理篇二---GenericServlet与HttpServlet
周凡杨
java HttpServlet 源理 GenericService 源码
在上一篇《解读Servlet原理篇一》中提到,要实现javax.servlet.Servlet接口(即写自己的Servlet应用),你可以写一个继承自javax.servlet.GenericServletr的generic Servlet ,也可以写一个继承自java.servlet.http.HttpServlet的HTTP Servlet(这就是为什么我们自定义的Servlet通常是exte
MySQL性能优化
bijian1013
数据库 mysql
性能优化是通过某些有效的方法来提高MySQL的运行速度,减少占用的磁盘空间。性能优化包含很多方面,例如优化查询速度,优化更新速度和优化MySQL服务器等。本文介绍方法的主要有:
a.优化查询
b.优化数据库结构
ThreadPool定时重试
dai_lm
java ThreadPool thread timer timertask
项目需要当某事件触发时,执行http请求任务,失败时需要有重试机制,并根据失败次数的增加,重试间隔也相应增加,任务可能并发。
由于是耗时任务,首先考虑的就是用线程来实现,并且为了节约资源,因而选择线程池。
为了解决不定间隔的重试,选择Timer和TimerTask来完成
package threadpool;
public class ThreadPoolTest {
Oracle 查看数据库的连接情况
周凡杨
sql oracle 连接
首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表。
select * from dict where table_name like '%SESSION%';
就可以查出一些表,然后根据这些表就可以获得会话信息
select sid,serial#,status,username,schemaname,osuser,terminal,ma
类的继承
朱辉辉33
java
类的继承可以提高代码的重用行,减少冗余代码;还能提高代码的扩展性。Java继承的关键字是extends
格式:public class 类名(子类)extends 类名(父类){ }
子类可以继承到父类所有的属性和普通方法,但不能继承构造方法。且子类可以直接使用父类的public和
protected属性,但要使用private属性仍需通过调用。
子类的方法可以重写,但必须和父类的返回值类
android 悬浮窗特效
肆无忌惮_
android
最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:
一开始考虑用自定义View来做。后来发现开线程让其移动很卡,ListView+动画也没法精确定位到目标点。
后来想利用Dialog的dismiss动画来完成。
自定义一个Dialog后,在styl
hadoop伪分布式搭建
林鹤霄
hadoop
要修改4个文件 1: vim hadoop-env.sh 第九行 2: vim core-site.xml <configuration> &n
gdb调试命令
aigo
gdb
原文:http://blog.csdn.net/hanchaoman/article/details/5517362
一、GDB常用命令简介
r run 运行.程序还没有运行前使用 c cuntinue 
Socket编程的HelloWorld实例
alleni123
socket
public class Client
{
public static void main(String[] args)
{
Client c=new Client();
c.receiveMessage();
}
public void receiveMessage(){
Socket s=null;
BufferedRea
线程同步和异步
百合不是茶
线程同步 异步
多线程和同步 : 如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法
多线程和异步:多线程可以做不同的事情,涉及到线程通知
&
JSP中文乱码分析
bijian1013
java jsp 中文乱码
在JSP的开发过程中,经常出现中文乱码的问题。
首先了解一下Java中文问题的由来:
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,
js实现页面跳转重定向的几种方式
bijian1013
JavaScript 重定向
js实现页面跳转重定向有如下几种方式:
一.window.location.href
<script language="javascript"type="text/javascript">
window.location.href="http://www.baidu.c
【Struts2三】Struts2 Action转发类型
bit1129
struts2
在【Struts2一】 Struts Hello World http://bit1129.iteye.com/blog/2109365中配置了一个简单的Action,配置如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configurat
【HBase十一】Java API操作HBase
bit1129
hbase
Admin类的主要方法注释:
1. 创建表
/**
* Creates a new table. Synchronous operation.
*
* @param desc table descriptor for table
* @throws IllegalArgumentException if the table name is res
nginx gzip
ronin47
nginx gzip
Nginx GZip 压缩
Nginx GZip 模块文档详见:http://wiki.nginx.org/HttpGzipModule
常用配置片段如下:
gzip on; gzip_comp_level 2; # 压缩比例,比例越大,压缩时间越长。默认是1 gzip_types text/css text/javascript; # 哪些文件可以被压缩 gzip_disable &q
java-7.微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1 , h2 ,判断这俩个链表是否相交
bylijinnan
java
public class LinkListTest {
/**
* we deal with two main missions:
*
* A.
* 1.we create two joined-List(both have no loop)
* 2.whether list1 and list2 join
* 3.print the join
Spring源码学习-JdbcTemplate batchUpdate批量操作
bylijinnan
java spring
Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造和封装
JDBC的batch操作:
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
[JWFD开源工作流]大规模拓扑矩阵存储结构最新进展
comsci
工作流
生成和创建类已经完成,构造一个100万个元素的矩阵模型,存储空间只有11M大,请大家参考我在博客园上面的文档"构造下一代工作流存储结构的尝试",更加相信的设计和代码将陆续推出.........
竞争对手的能力也很强.......,我相信..你们一定能够先于我们推出大规模拓扑扫描和分析系统的....
base64编码和url编码
cuityang
base64 url
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
web应用集群Session保持
dalan_123
session
关于使用 memcached 或redis 存储 session ,以及使用 terracotta 服务器共享。建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session,还可以做其他用途,一举几得啊。1、使用 filter 方法存储这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简
Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']
dcj3sjt126com
数据库
public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCo
solr StatsComponent(聚合统计)
eksliang
solr聚合查询 solr stats
StatsComponent
转载请出自出处:http://eksliang.iteye.com/blog/2169134
http://eksliang.iteye.com/ 一、概述
Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min、max、avg、count、sum的功能
二、参数
百度一道面试题
greemranqq
位运算 百度面试 寻找奇数算法 bitmap 算法
那天看朋友提了一个百度面试的题目:怎么找出{1,1,2,3,3,4,4,4,5,5,5,5} 找出出现次数为奇数的数字.
我这里复制的是原话,当然顺序是不一定的,很多拿到题目第一反应就是用map,当然可以解决,但是效率不高。
还有人觉得应该用算法xxx,我是没想到用啥算法好...!
还有觉得应该先排序...
还有觉
Spring之在开发中使用SpringJDBC
ihuning
spring
在实际开发中使用SpringJDBC有两种方式:
1. 在Dao中添加属性JdbcTemplate并用Spring注入;
JdbcTemplate类被设计成为线程安全的,所以可以在IOC 容器中声明它的单个实例,并将这个实例注入到所有的 DAO 实例中。JdbcTemplate也利用了Java 1.5 的特定(自动装箱,泛型,可变长度
JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节
justjavac
json
2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿。事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢。在沟通单一 Rails 服务器库—— ActiveModel::Serializers 和单一 JavaScript 客户端库——&
网站项目建设流程概述
macroli
工作
一.概念
网站项目管理就是根据特定的规范、在预算范围内、按时完成的网站开发任务。
二.需求分析
项目立项
我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论够,初步达成制作协议,这时就需要将项目立项。较好的做法是成立一个专门的项目小组,小组成员包括:项目经理,网页设计,程序员,测试员,编辑/文档等必须人员。项目实行项目经理制。
客户的需求说明书
第一步是需
AngularJs 三目运算 表达式判断
qiaolevip
每天进步一点点 学习永无止境 众观千象 AngularJS
事件回顾:由于需要修改同一个模板,里面包含2个不同的内容,第一个里面使用的时间差和第二个里面名称不一样,其他过滤器,内容都大同小异。希望杜绝If这样比较傻的来判断if-show or not,继续追究其源码。
var b = "{{",
a = "}}";
this.startSymbol = function(a) {
Spark算子:统计RDD分区中的元素及数量
superlxw1234
spark spark算子 Spark RDD分区元素
关键字:Spark算子、Spark RDD分区、Spark RDD分区元素数量
Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Block数。
可以利用RDD的mapPartitionsWithInd
Spring 3.2.x将于2016年12月31日停止支持
wiselyman
Spring 3
Spring 团队公布在2016年12月31日停止对Spring Framework 3.2.x(包含tomcat 6.x)的支持。在此之前spring团队将持续发布3.2.x的维护版本。
请大家及时准备及时升级到Spring
fis纯前端解决方案fis-pure
zccst
JavaScript
作者:zccst
FIS通过插件扩展可以完美的支持模块化的前端开发方案,我们通过FIS的二次封装能力,封装了一个功能完备的纯前端模块化方案pure。
1,fis-pure的安装
$ fis install -g fis-pure
$ pure -v
0.1.4
2,下载demo到本地
git clone https://github.com/hefangshi/f