JAVA中,流旨在创建一种关注“做什么而非怎么做”的设计理念,我们无需关心流内具体的实现,而把更多精力放在流需要做什么上面。例如我们需要计算一个字符串数组中,长度大于10的有多少,参见下面的代码清单: public static void main(String args[]) throws IOException{ String contents = new String(Files.readAllBytes(Paths.get("/Users/liebes/Desktop/open.route")), StandardCharsets.UTF_8); List<String> words = Arrays.asList(contents.split("\\PL+")); long count = 0; // 怎么做 for(String s : words){ if(s.length() > 10) count++; } System.out.println(count); // 做什么 count = words.stream().filter(s -> s.length() > 10).count(); System.out.println(count); count = words.parallelStream().filter(s -> s.length() > 10).count(); System.out.println(count); } 第一种方式,是很容易想到的一种,循环遍历计算的一种方法,而第二种则是使用了流的概念。 Stream,流。我们可以理解为水流,所有的流操作都是惰性的,即当你访问数据的时候,相关操作才会执行。我们在水流的行进方向设置我们想要完成的操作,当水流经过时,就会执行相关的操作。例如上面的 count = words.stream().filter(s -> s.length() > 10).cou... ...
据换完博客主题之后也有一段时间了,但总觉得哪里不对的样子,别人家都是主页和博客分开的,或者把博客放在主页的子目录下,而自己的却只有一个博客,反正自己也有域名,为什么不整个单独的主页出来呢。 这篇文章记录了海痴是如何在 google 上扒模版,如何利用 travis 来将博客的内容同步到主页上,又如何与某涛互相比较,解决图片加载慢的问题。 我们可以看看最终的效果:https://www.liebes.top 在一切开始之前,海痴已经准备好了用 hexo 搭建起来的博客,一个自己的域名,以及使用 travis 将博客部署到自己的服务器的脚本。可以参见上一篇博客:Hexo 更换 materail 主题,使用 Travis 持续集成 一份靠谱的主页模板关于如何找到一份高端上档次的主题模板,大家可以各显神通,当然,最快的还是 google 上搜一下:“主页 模板 bootstrap”,请一定加上 bootstrap 这个关键字,因为经过实践,这样搜出的结果最靠谱。 准备好之后,就可以将模板文件放在博客的根目录下,随便起个名字,就像这样: ├── _config.yml ├── db.json ├── liebes.top <- 这个是模板文件 ├── liebes.top.py <- 这个是之后会用到的脚本文件 ├── node_modules ├── package-lock.json ├── package.json ├── public ├── pyyaml ├── scaffolds ├── source ├── themes └── travis.enc 根据你的需要来修改你的主页模板... ...
最近被安排到中汽研实习(就算是实习吧),做了一些基于深度学习的图像识别工作,其实说起来自己对深度学习也没什么太深入的了解,都是现学现卖,跑人家的例子。不过还是在这边记录一下,以后回首可以稍稍感慨一下年轻时的无知。 关于机器学习,基础知识是看周志华的西瓜书(清华大学出版社的机器学习)来学习的,不过大致是囫囵吞枣,没有静下心来安安稳稳地钻研(时间也不允许)。 之后看了网易云课堂中吴恩达的机器学习教程,受益匪浅,推荐刚入门的同学去看看,讲的很好。 在吴恩达的视频中,大致了解了卷积神经网络和深度学习大致的套路,其实说到底就是各种卷积层(convolution layer),池化层(pooling layer),全连接层(fool connected layer)不断组合。 感觉机器学习想要深入了解,可能需要看很多相关的论文,之后的学习路程就记录在之后的博客中好了。 先说说甲方的需求:需要在行车过程中动态识别出前方交通标志,如果是限速标识,需要识别中里面的数字。 最近只做了第一部分,也就是交通标志的识别。对卷积神经网络有过了解的话能感觉出来这就是一个分类问题,好在公司已经标好了数据,并且是按照 VOC 格式标记的,接下来就是使用现成的网络训练就可以了。 我用的是 YOLO 在darknet 网站上有 v1 和 v2 两个版本。 https://pjreddie.com/darknet/yolo/ 以上是 YOLO darknet 版本的官网,上面的说明非常详细,也非常人性化,即使没有 GPU 也可以使用,可以简单的按照上面的教程进行安装。 注意,darknet 默认是不开启 GPU ...
是的,我折腾了一天把博客的模版换了一下。怎么说呢,之前用的 Next 主题,很简约,看起来也很舒服,但总觉得少点什么,后来逛了逛其他人的站,感觉 Next 主题没有图,视觉上没什么冲击力,灰蒙蒙的感觉,于是采用了 material 这个主题,也很简洁,相比之下色彩丰富一些。 之前在使用 github pages 有一些不爽的地方就是地址不是自己的域名,然而宝宝是买了域名的,为什么要在 github 下弄呢,之前尝试过使用CNAME进行域名解析,但是在处理 https 的问题上比较麻烦,想着弄一套 CI流程出来。试过 hexo 的 deploy 插件,用 rsync 进行自动部署,然而未果,各种奇怪的问题弄的头痛。最近心血来潮 google 一番,发现好多人都在用Travis CI 来自动化部署,于是尝试了一下,效果很不错。 大致整理整理安装的过程吧,在阅读下面的文字之前,你需要自己安装过一次hexo,并了解hexo。 HEXO MATERIAL 主题更换从 github 上下载 material 主题:https://github.com/viosey/hexo-theme-material 下载 release 或者直接克隆项目均可,将主题包移动到 hexo 项目的 theme 中并修改博客配置文件 _config.yml theme: material 此时运行 hexo s 在本地就可以预览到 material 主题的样式了。接下来的步骤,完全可以按照官方的教程一项一项设置,不要嫌麻烦,因为很多特性默认都是没有的,需要自己去打开。 官方文档: ...
前情摘要自己作死干了一件特别蠢的事情(具体略) 然后开始研究如何进行增量备份 增量备份原理mysql 有个 binlog 的功能,会记录所有的用户的操作,可以依靠这个,配合全备份,将数据库回滚到某一个特殊的时刻。hhh 简单来说,比如我们每周做一次全备份,每天做一次增量备份,当数据库发生问题的时候,我们就可以先将数据库回滚到上一周我们的全备份的时间,然后再通过每天的增量备份(其实就是模拟所有的数据库操作,全部执行一遍),将数据恢复到我们想要的时间点。 配置mysql 的 binlog 功能需要在配置文件中打开,在 my.cnf 或者 mysqld.cnf 中添加以下几行: server-id = 1 # binlog存放路径 log_bin = /var/log/mysql/mysql-bin.log # binlog记录的格式,有row、statement、mixed三种选项 binlog-format = row # binlog写缓冲区设置大小,由于是内存,写速度非常快,可以有效提高binlog的写效率,如果数据库中经常出现大事务,可以酌情提高该参数。 binlog_cache_size = 32m # 最大缓存区大小 max_binlog_cache_size = 512m # binlog文件最大的大小 max_binlog_size = 1000m # 需要备份的数据库名,如... ...
接上一篇编辑器的使用,自己尝试着写了一段js代码,本以为laravel的 {{ $item }} 渲染可以完美的避免 XSS 的攻击(确实可以避免),但是由于 Editor 生成的时候,重新渲染了一遍,导致了可能出现的XSS漏洞。 可以看到,Editor已经帮助我们做了html的编码,于是我觉得不需要进行二次编码,就直接存到了数据库里,并且直接在前端进行了渲染。 Controller $res = Notification::updateById($notice_id, [ 'content' => $content, 'title' => $title, 'fileName' => $file_name, 'filePath' => $file_path ]); view <textarea id="editor" name="editor" rows="10" cols="80"> {{ $notice['content'] }} </textarea> 看起来一点问题也没有对不对!! 然而当渲染的时候缺弹出了一个框框······ 查看代码发现变成了整个样子 ...
假期写代码,整理一些关于Editor,文件上传相关的东西。 editor 文件上传(Laravel) Trumbowyg Editor Trumbowyg 是一款轻量级的编辑器,可以高度DIY,界面也很简洁。 官方网站:Trumbowyg 首先下载官方包,在官网可以直接下载。 目录结构如下: 其中只需要留下 dist 文件夹即可,其余的是文档,例子,直接删除即可。 使用方法很简单,在 view 界面引用相关的 css 文件与 js 文件,这里默认已经引用了Jquery <link rel="stylesheet" href="/Trumbowyg/dist/ui/trumbowyg.min.css"> <script src="/Trumbowyg/dist/trumbowyg.js"></script> 同时需要创建一个 textarea 作为 editor 的容器 <textarea id="editor" name="editor" rows="10" cols="80"></textarea> 接下来就可以使用Trumbowyg 创建一个编辑器出来 <script> ... ...
在国哥的安排下,对着 kali渗透测试之 SQL injeciton 视频教程一顿撸(虽然没什么卵用),记录下来自己的一些实验过程和经历。 提前准备 本地的 lemp 环境,搭建可参考:Centos 7 Nginx + php + mysql Web服务器搭建 和 Unbuntu16.04 Nginx + php + mysql Web服务器搭建 当然 xampp 也是极好的。 用于攻击的 php 脚本和数据库,下面会给出 编写脚本找个能够访问的地方,编写如下 php 脚本 <html> <head></head> <body> <form action="./login.php" method="post"> ID<input name="id" type="text"><br/> <input type="submit" value="提交"> </form> <div> <p> ... ...
不知道广大程序员们是怎么处理 Windows 和 Linux 的,最开始在 Windows 下面跑 Linux 的虚拟机,卡的自己怀疑人生。后来做了个双系统,自己 250 的固态表示根本不够用,而且动不动关机重启,别问我为什么,毕竟 office 割舍不了。后来一个学长点了我一下,既然想用 Linux 搞事情,用什么图形化界面,搞个服务器不就好了。然后我就搞了个腾讯云,然而,网络不好的时候真的蛋疼。最后,在宁哥大腿的指引下,尝试了一下 Vagrant 虚拟机,快的飞起,果断放弃双系统。 这里记录一些自己在搭建 Vagrant 环境时的步骤以及踩的坑。 提前准备: Vagrant VirtureBox 首先,我们要选择一个适合我们的 box 也就是操作系统。Vagrant 提供了许多 box 供我们使用:Vagrant Box 。这里,海痴选择的是 ubuntu16.04。 那么,当我们装好了 Vagrant,VirtureBox,并且下载好所需要的box以后,就可以开始搞事情了。当然,为了接下来的发展更加顺利,强烈建议装一个 Git ,毕竟 Git bash 异常的好用。 我们新建一个文件夹,命名为 ubuntu,并且将我们的 box 移到这个目录下。在这个目录打开命令行界面,添加box $ vagrant box add xenial-server-cloudimg-amd64-vagrant.box 添加后的 box 可以使用 vagrant box list ...
最近在看《白帽子讲WEB安全》这本书,按着章节记录一下实践和学习的过程。 同源策略 简单来说,同源策略限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性 同源的网站指起host地址是一致的 比如以下几个地址 http://store.company.com/dir2/index.html http://store.company.com/dir1/index.html https://store.company.com/dir1/index.html http://store.company.com:8080/dir2/index.html http://news.company.com/dir1/index.html 其中1,2是同源的,而其他几个则不是。 对于一个网页中加载的javascr... ...
Jenkins旨在编程的持续继承,测试部署自动化,官方给的简介如下: Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks such as building, testing, and deploying software. Jenkins can be installed through native system packages, Docker, or even run standalone by any machine with the Java Runtime Environment installed. 首先下载 Jenkins 的war包jenkins.war运行命令 $ java -jar jenkins.war 该命令会在本地的8080端口运行jenkins访问 localhost:8080 会看到jenkins 的欢迎界面,按照步骤依次进行设置。在安装插件的界面,选择默认即可,jenkins会帮你安装一些常见的插件,比如git,pipeline等设置结束后会看到如下界面点击左上角新建按钮,即可新建一个项目,这里我们选择新建一个maven项目。在github project选项上选择我们的github地址在源码管理设置上选择git,并设置默认编译的分支为主分支 ...
软件测试小组作业之JPF 首先先说说JPF是个什么东西 官方给出的解释: JPF核心是用于Java™字节码的虚拟机(VM),这意味着它是一个程序,您可以让Java程序执行。它用于在这些程序中找到缺陷,因此您还需要给出属性以作为输入进行检查。 JPF通过一份报告来回复,该报告说如果属性持有和/或由JPF创建的验证工件进行进一步分析(如测试用例)。 JPF是一个有几个扭曲的虚拟机。它在Java本身中实现,所以不要指望它像您的普通Java一样快速运行。它是在VM上运行的VM。虽然Java字节码的执行语义在http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html/ Sun的Java虚拟机规范中有明确定义,但我们在JPF中几乎没有硬连线语义 - VM指令集由一组可被替换的类表示。 默认指令集使用下一个JPF功能:执行选项。 JPF可以识别您的程序中的执行可能不同的进程,然后系统地探索所有这些点。这意味着JPF(理论上)通过程序执行所有路径,而不仅仅是像普通的VM那样。典型的选择是不同的调度序列或随机值,但JPF可以再次介绍您自己的类型,如用户输入或statemachine事件。 个人觉得JPF是一个针对JAVA程序寻找可执行路径的工具。看了一下官方的例子,觉得JPF可以在JAVA程序执行时自动检测所有的可执行路径,找到可能出现问题的路径。不同于传统的基于用例的Testing,JPF采用的是Model Checking,尽管基于用例的测试在用例足够多的时候有着很不错的测试效果,但是很难保证测试到所有的可行路径。JPF官方给出了基于测试用例的Testing 与 Model Testing 的差别: ...
Selenium 用于WEB程序测试,可以录制下来点击过程的脚本,并自动进行测试。 使用selenium-ide 进行脚本录制 使用java编写selenium程序,实现自动验证 使用selenium-ide 进行脚本录制在开始实验之前,需要安装所需要的软件。首先想要使用selenium-ide,需要是用firefox浏览器。firefox下载链接selenium-ide下载链接将下载后的selenium插件拖到firefox里即可自动安装。成功安装后,在firefox中可以打开selenium插件:选择开发者工具中的selenium-ide打开后长这个样子在1的位置输入想要测试的网址,接着点击2位置的按钮开始录制。去浏览器访问对应的网站,完成表单提交操作,回到selenium-ide会看到录制下来的case,最后点击4,会将当前所有的case执行一遍。 使用java编写selenium程序,实现自动验证新建一个java项目,然后导入下列jar包 ...
记录记录自己踩过的坑 按照官方文档,乖乖的用composer进行安装: $ composer global require "laravel/installer" 然后,就给我报了噼里啪啦一堆错误 [Composer\Downloader\TransportException] The "https://packagist.org/packages.json" file could not be downloaded: fai led to open stream: Connection timed out EXM?我还啥也没干呢啊 = =。然后吧,我就把这个错误扔到了google上,注意了注意了,划重点了!搜出来解决方案的没有一个可以用的!然后我发现只是单纯的被墙了而已。WHAT THE FUCK !!!解决办法也挺简单,把composer的源切成国内镜像就好了 $ composer config -g repo.packagist composer https://packagist.phpcomposer.com 具体的可以参见 Packagist / Composer 中国全量镜像 这里。接下来就可以愉快的使用laravel了 $ composer global require "laravel/installer" 使用laravel新建一个项目,然后就可以看到牛逼闪闪的lavavel的目录结构: $ laravel new myProject ...
这是个悲伤的故事,海痴的linux出了点毛病,然后就想着重装一遍。掐指一算,自家的代码在git上面都保存了,直接重装!然后吧,hexo你大爷,你没事就不能把博客原文备份一下么?又不占你的空间!那么费劲么!是的,海痴的博客都没了,别问我为什么还能看着,宝宝复制粘贴都快吐了,弄到凌晨两点多才恢复了。这件事情告诉我们,没事闲的别重装系统。 具体的思路就是在我们的博客仓库中新建一个分支,用来保存源码,master分支用来提交hexo自动生成的文件。以海痴的博客为例。打开wanghaichi.github.io工作目录,我们可以喜闻乐见的发现没有.git文件夹。那么接下来的事情就简单了打开工作目录,执行以下操作 $ git init $ vi .gitignore .DS_Store Thumbs.db db.json *.log .deploy*/ node_modules/ .npmignore public/ $ git branch -b hexo $ git add . $ git commit -m "backup" $ git remote add origin git@github.com:wanghaichi/wanghaichi.github.io.git $ git push origin hexo 如果没设置ssh权限可能需要设置一下,然后去github仓库里面切换以下分支,你的可爱的博客就都在里面啦。以后每次写完博客,先执行一遍 $ git add . $ git commit -m "backup" $ git push origin hexo 再发布,就不用担心自家博客丢失啦 妈妈再也不用担心复制博客到零点啦 ...
书上的练习题,要求设计相应的测试用例,写出主路径覆盖 Problem Description Answer Problem Description /*********************************** * Finds and prints n prime integers * Jeff Offutt, Spring 2003 ************************************/ private static void printPrimes (int n){ int curPrime; // Value currently considered for primeness int numPrimes; // Number of primes found so far. boolean isPrime; // Is curPrime prime? int [] primes = new int [MAXPRIMES]; // The list of prime numbers. // Initialize 2 into the list of primes. primes[0] = 2; numPrimes = 1; curPrime = 2; while(numPrimes < n){ curPrime++; //next number to consider ... isPrime = true; for(int i = 0; i <= numPrime-1; i++){ if(isDivisible(primes[i], curPrime)){ isPrime = false; ... ...
之前每次都死在这里,这把终于搞明白了。弄个虚拟主机的目的是将多个项目都可以跑在虚拟域名的根目录下,在本地调试结构也比较清晰。 首先备份一份 default 配置文件 $ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak 接下来以example.com域名为例 $ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com.conf 修改新的配置文件的内容 server { listen 80; listen [::]:80; server_name example.com; root /var/www/example.com; index index.html index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass 127.0.0.1:9000; } location ~ /\.ht { deny all; } } 这里你需要有对应的工作目录,将配置文件链接到 sites-enabled 中使其生效下面这里要注意了,一定要写绝对路径。 $ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ $ sudo systemctl reload nginx 在hosts文件中加上映射 ...
软件测试第一次上机,测试了一下JUnit的使用和覆盖测试,虽然实验要求是用eclipse,但我还是被idea的美色所臣服。 Junit 安装与使用 覆盖测试 Junit 安装与使用首先去官网下载Junit的jar包和其依赖 junit-4.12.jar hamcrest-core-1.3.jar 打开Idea,新建一个项目,并在项目中与src目录平级创建test和lib文件夹,并将下载的jar包放在lib文件夹中在idea中导入junit:File>Project Structure>Modules 点击 ‘+’ 引入刚刚下载的jar包,点击 Apply将test文件夹设置为测试文件夹在test文件夹右键 > Mark Directory as > Test Resources Root回到Main.java 编写testTriangle方法 //判断一个三角形的形状:等边,等腰,普通 public s... ...
下决心不再用lamp的集成包了,自己搞一个出来。 Nginx php mysql Nginx首先安装使用 apt 安装nginx$ sudo apt install nginx然而由于之前安装过nginx,卸载还不干净,导致配置文件读取失败,出现错误: Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. invoke-rc.d: initscript nginx, action "start" failed. ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since 四 2017-03-09 00:06:13 CST; 7ms ago Process: 4540 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE) 3月 09 00:06:13 hardy-Inspiron-5547 systemd[1]: Starting A high performance.... 3月 09 00:06:13 hardy-Inspiron-... ...
软件测试课程作业,按照要求设计相关的测试用例 问题描述 问题解答 问题描述 Below are two faulty programs. Each includes a test case that results in failure. Answer the following questions about each program. // program 1 public int findLast (int[] x, int y) { //Effects: If x==null throw NullPointerException // else return the index of the last element // in x that equals y. // If no such element exists, return -1 for (int i=x.length-1; i > 0; i--){ if (x[i] == y){ return i; } } return -1; } / test: x=[2, 3, 5]; y = 2 / Expected = 0 // program 2 public static int lastZero (int[] x) { // Effects: if x==null throw NullPointerException // else return the index of the LAST 0 in x. // Return -1 if 0 does not occur in x for (int i = 0; i < x.length; i++){ if (x[i] == 0){ return i; } } return -1; } // test: x=[0, 1, 0] // Expected = 2 ...
php中过滤函数的编码问题 mysql不经过滤直接拼接的问题 php中过滤函数的编码问题问题发生的背景是整理服务器,将一部分php5的代码迁移到php7的服务器上。 If omitted, the default value of the encoding varies depending on the PHP version in use. In 5.6 and later, the default_charset configuration option is used as the default value. PHP 5.4 and 5.5 will use UTF-8 as the default. Earlier versions of PHP use ISO-8859-1. 这是官方的文档,能看到在php5.6之前与之后 string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] ) 这个函数的默认编码变了,使得当在php5.6之后的版本,该函数无法对编码格式为gbk的进行过滤。需要显示定义 string $encoding = ini_get("default_charset")这个参数。 mysql不经过滤直接拼接的问题这个则是蠢得不行不行的bug,懂点的人都知道mysql如果直接拼接字符串会导致各种注入问题。比如: ...
Homework Description Project Description Homework Description A project is collection of coordinated work activities conducted within a specific time frame that utilizes resources to achieve specified objectives. Briefly describe a project from your personal life that you have recently completed. State the nature of the project, the initial objectives, and planned the starting and ending dates and the actual starting and ending dates of the project. List any resources used (money, tools, materials, labor). List and compare the outcome of your project to the initial objectives. Project Description Initial objectives We wanted to add some new funcitons on TJU online judge such tha... ...
安装Nginx 安装php5 安装php7 安装mysql 搭建nginx服务在所有工作之前,先更新一下yum咯$ yum install yum $ yum -y update然后使用yum安装nginx# 如果没有nginx包尝试使用下面的命令添加 $ yum install epel-release $ yum install nginx # 启动 $ systemctl start nginx # 开机自启 $ systemctl enable nginx然后就可以在浏览器输入http://127.0.0.1,会看到nginx的欢迎界面,如果是远程服务器请输入以下命令查看ip$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' # 或者 $ curl http://icanhazip.com—安装php5使用yum安装,十分简单。$ yum install php php-mysql php-fpm安装完成后,修改 /etc/php.ini 文件,找到 cgi.fix_pathinfo=0 这一行,取消注释并修改成0然后修改 /etc/php-fpm.d/www.conf 文件,需要修改一下几个地方listen = /var/run/php-fpm/php-fpm.sock listen.owner = nobody listen.group = nobody user = ... ...
在ninge的帮助下,终于搞出了ftp服务器,记下来以后用 ftp服务器搭建 sftp服务器搭建 用户权限设置 啰嗦几句 ftp服务器搭建首先安装sftp服务 [root@hardy ~]# yum install vsftpd 修改配置文件,在修改配置文件之前记得备份 [root@hardy ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak [root@hardy ~]# vim /etc/vsftpd/vsftpd.conf vsftpd服务有许多配置,这里不一一赘述,将一些常用的写出来 #匿名用户是否可以登录 anonymous_enable=YES #允许系统用户名登录 local_enable=YES #允许使用任何可以修改文件系统的FTP的指令,禁用这项则用户无法修改 write_enable=YES #本地用户新建文件的掩码 local_umask=022 #开启日志功能 xferlog_enable=YES #日志文件位置 xferlog_file=/var/log/vsftpd.log #这三项设置chroot,用来限制用户只能访问家目录,这三项一会详说。 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list 修改以下配置 anonymous_enable=NO chroot_local_user=YES #以下需要手动添加 allow_writeable_chroot=YES pasv_enable=YE... ...
下载安装jdk 配置JAVA环境变量 搭建tomcat环境 安装php-java-bridge工具 下载安装jdk首先去Oracle官网下载jdk安装包:下载地址根据系统版本选择要下载的安装包,海痴选择的是 jdk-8u111-linux-x64.tar.gz下载后解压 $ tar -xzvf jdk-8u111-linux-x64.tar.gz 在/opt下创建java目录,并将解压后的文件夹移动到java目录下 $ sudo mkdir /opt/java $ sudo mv jdk1.8.0_111 /opt/java 配置JAVA环境变量修改 /etc/profile 文件,在文件尾添加如下内容 $ sudo vim /etc/profile export JAVA_HOME=/opt/java/jdk1.8.0_111 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE... ...