所学 – 年轮博客 https://bk.google2015.cn 造梦者 Fri, 07 Jun 2024 06:36:52 +0000 zh-Hans hourly 1 【试水】pp飞桨-合成虚拟人 https://bk.google2015.cn/%e3%80%90%e8%af%95%e6%b0%b4%e3%80%91pp%e9%a3%9e%e6%a1%a8-%e5%90%88%e6%88%90%e8%99%9a%e6%8b%9f%e4%ba%ba/ Tue, 28 Mar 2023 08:00:13 +0000 https://bk.google2015.cn/?p=407

坑还是不少 ,以下是安装笔记。

安装conda

conda create -n ppfj python=3.7
conda activate ppfj

下载项目代码

git clone https://gitee.com/xiejiehang/PaddleBoBo.git -b develop

安装PaddleGAN和PaddleSpeech依赖

pip install ppgan paddlespeech

wget https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz
tar zxvf nltk_data.tar.gz

cd PaddleBoBo
pip install -r requirements.txt

静态图像转虚拟主播动画

python create_virtual_human.py --config default.yaml

坑:

1.可能需要安装版本一致 比如cuda 11.7 和 cudann
2.如果报版本冲突 比如 11.7版本冲突
python -m pip install paddlepaddle-gpu==2.4.2.post117 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
3.如果报Could not locate zlibwapi.dll. Please make sure it is in your library path!
参考https://www.iotword.com/2025.html

让虚拟主播说话

python general_demo.py --human ./file/input/test.mp4 --output ../output.mp4 --text 你好世界

坑: 如果报错版本 可能需要降低版本
pip install paddlespeech==0.1.0 原本的是1.3.0
pip install typeguard==2.13.3 原本是3.0.1
pip install paddleaudio==1.0.1 原本是1.0.2

甚至可能还会缺少ffmpeg 所以又要装
https://ffmpeg.org/download.html

打包conda命令

conda pack -n <env_name> -o <output_path>/<file_name>.tar.gz

]]>
SpringMvc中转发的html文件中文是乱码 (tomcat8解决方法) https://bk.google2015.cn/springmvc%e4%b8%ad%e8%bd%ac%e5%8f%91%e7%9a%84html%e6%96%87%e4%bb%b6%e4%b8%ad%e6%96%87%e6%98%af%e4%b9%b1%e7%a0%81-%ef%bc%88tomcat8%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95%ef%bc%89/ Tue, 08 Dec 2020 09:19:15 +0000 https://bk.google2015.cn/?p=351 1 、最简单解决方案: 该解决方案不再需要任何额外配置(如filter)
TOMCAT默认ISO-8859-1 因此可以设置默认编码为UTF-8解决,在confserver.xml文件中设置如下

Java代码

<Connector port="8080" protocol="HTTP/1.1"  
                               connectionTimeout="20000"  
                               redirectPort="8443" URIEncoding=”UTF-8”/>

2 、在 tomcat4 之后,可以通过如下配置来解决中文乱码,但必须配置 filter
在confserver.xml文件中设置如下

Java代码

<Connector port="8080" protocol="HTTP/1.1"  
                                       connectionTimeout="20000"  
                                       redirectPort="8443" useBodyEncodingForURI=“true”  />  


然后request.setCharacterEncoding(“UTF-8”)也可解决GET乱码

]]>
ssm项目部署上线(ubentu+Ngix转发+域名解析) https://bk.google2015.cn/ssm%e9%a1%b9%e7%9b%ae%e9%83%a8%e7%bd%b2%e4%b8%8a%e7%ba%bfubentungix%e8%bd%ac%e5%8f%91%e5%9f%9f%e5%90%8d%e8%a7%a3%e6%9e%90/ Mon, 25 May 2020 20:16:45 +0000 https://bk.google2015.cn/?p=353 坑:

MySQL5.7版本最高只适配到Ubuntu17.04,而MySQL8.0最高适配到Ubuntu18.04。

所以别像我一样用18.04安装MySQL5.7浪费了大量时间。

配置root账户

sudo passwd root

输入2次root密码

su

登录root账户

安装jdk

apt update

刷新存储库索引

apt upgrade

升级所有可升级软件包

apt install openjdk-8-jdk

安装jdk

java -version

检查jdk版本

卸载mysql

安装之前一定要确保服务器mysql卸载干净

dpkg -l | grep mysql

查看是否存在mysql

apt purge mysql-*

逐个卸载

也可使用

apt autoremove mysql-server

安装mysql

apt install mysql-server

打包安装mysql核心、客户端和服务端等

服务端安装时需要输入2次mysql密码

sudo netstat -tap | grep mysql

查看是否安装成功

mysql -uroot -p 你的密码

登录mysql

连接数据库

这时候连接数据库

 

会显示10060错误

先在服务器的安全组开放3306端口

vi /etc/mysql/mysql.conf.d/mysqld.cnf

我们需要将mysql默认只允许本地访问的设置关掉

bind-address        = 127.0.0.1

找到这行在前面加个#号注释掉

mysql -u root -p    //登录MySQL  
mysql> grant all on *.* to root@"%" identified by "密码";     //任何远程主机都可以访问数据库  
mysql> FLUSH PRIVILEGES;    //需要输入次命令使修改生效  
mysql> EXIT    //退出 

另外我们还需要设置mysql用户

这样就可以正常连接了

传文件

使用winscp连接

出现拒绝访问 我们需要开放ssh登录

vi /etc/ssh/sshd_config

修改ssh配置

PermitRootLogin prohibit-password

找到

PermitRootLogin yes

改为

sudo passwd root 

重新设置下密码

systemctl restart sshd 

重启ssh

就可以登录了

安装tomcat

apt install tomcat8
apt install tomcat8-docs tomcat8-examples tomcat8-admin

依然使用apt安装

/etc/init.d/tomcat8 start
/etc/init.d/tomcat8 stop
/etc/init.d/tomcat8 restart

启动 停止 重启命令

开放8080端口

访问ip:8080你能看到这个页面就是成功了

上传项目

传数据库

建好数据库

在本地表进行全选复制 服务器的表进行粘贴 弹出此页 下一步 开始


传输成功

将本地的war包传到tomcat webapps目录下

打开server.xml文件 将8080端口改为80端口 配置自己的项目

/etc/init.d/tomcat8 restart

重启tomcat

此时你的项目应该能访问了

如果 你的服务器和我一样 被提供商禁止了80端口访问

可以使用Nginx端口映射

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j REDIRECT --to-port 8080

ps:记得把server.xml端口改回来

此时就能将端口解析到域名了

域名解析


直接输入服务器ip保存等待生效

]]>
解决Tomcat7.0在idea中乱码现象 https://bk.google2015.cn/%e8%a7%a3%e5%86%b3tomcat7-0%e5%9c%a8idea%e4%b8%ad%e4%b9%b1%e7%a0%81%e7%8e%b0%e8%b1%a1/ Mon, 24 Feb 2020 09:38:49 +0000 https://bk.google2015.cn/?p=356 解决办法 1.打开你安装Tomcat的所在目录,本文以7.0.92为例。
2. 打开后选择conf目录。
3. 将里面的logging.properties文件用编辑器打开,本例子是使用“Notepad++”编辑器打开。
4. 打开后大约在50行左右找到java.util.logging.ConsoleHandler.encoding = UTF-8
5. 修改为java.util.logging.ConsoleHandler.encoding = GBK;
6.重新启动Tomcat就可以了。

]]>
#武汉加油# 阿里云“在家实践”免费领取2核4GECS及学习资源 https://bk.google2015.cn/%e6%ad%a6%e6%b1%89%e5%8a%a0%e6%b2%b9%e9%98%bf%e9%87%8c%e4%ba%91-%e9%ab%98%e6%a0%a1%e5%ad%a6%e7%94%9f%e5%9c%a8%e5%ae%b6%e5%ae%9e%e8%b7%b5%e5%85%8d%e8%b4%b9%e9%a2%86%e5%8f%962/ Thu, 06 Feb 2020 09:25:24 +0000 http://bk.google2015.cn/?p=279 因新冠肺炎疫情,学校延期开学。在家时间不浪费,学习、实践提高能力好机会。阿里云高校“在家实践”计划,全国高校学生,每人可免费领取一台ECS算力资源,在线实践课程等多种免费资源。

注册登录、完成学生认证(支付宝登录,符合标准的可跳过认证)、完成测试、领取学习资源,然后就可以开启云上学习啦

测试环节为5道基础题目,日常建站或者对服务器有所了解的同学都可以通过

规则不做详细介绍,直接划重点。

1. 学生计划用户免费领取的云服务器ECS,有效期自领取日起6个月内有效。用户学生认证在有效期内且有效时长大于等于6个月的用户,云服务器ECS到期释放前,可登录个人中心,参加阶段性学习考试,测试通过,可免费续期1次,时长为6个月。使用过程中如需对领取产品进行升级,请按照标准费用进行升级。

2.参与阿里云高校在家实践计划的学生用户,同一用户最多可保有2台云服务器ECS,指包括满足学生计划条件用户,领取的1台云服务器ECS(同一用户限领1台),和通过教师计划,满足实名认证和学生认证条件用户,获得教师提供兑换码,验证成功,领取的1台云服务器ECS(同一用户限领1台)。

活动地址

]]>
Eclipse Debug 使用方法 https://bk.google2015.cn/eclipse-debug-%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95/ Sat, 25 May 2019 01:43:34 +0000 https://bk.google2015.cn/?p=358 Debug视图

Debug视图在Eclipse的右上角打开

Debug的工具栏常用的就这7个:

按照从左到右的顺序分别介绍功能:
Resume:恢复暂停的线程,直接从当前位置跳到下一个断点位置。

Suspend:暂停选定的线程,这个时候可以进行浏览或者修改代码,检查数据等。

Terminate:Eclipse通过Terminate命令终止对本地程序的调试。

Disconnect:Eclipse使用Disconnect命令来终止与远程JVM的socket连接。

Step Into:单步执行,遇到子函数就进入并且继续单步执行

Step Over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完在停止,也就是把子函数整个作为一步。

Step Return:跳出当前方法,在被调用方法的执行过程中,使用Step Return会在执行完当前方法的全部代码后跳出该方法返回到调用该方法的方法中。

其实常用的无非就是后面3个 快捷键分别为F5 F6 F7

我的理解是:

F5 一句句执行 遇到子函数就进入继续一句句执行
F6 在遇到子函数时不会进入子函数 而是直接运行完子函数(就是把子函数作为一句运行 不会进入)
F7 我认为就是不小心通过F5的句句执行进入了子函数之后(也许是点快了不小心进了子函数) 再通过F7可以让其运行完该方法全部代码回到上一个方法中

你一定疑问如果子函数中含有Scanner 扫描器等会出现什么情况 那当然是语句停在扫描器那一句啊 不会管你是什么调试。

三个面板的作用:

Variables View :


该面板负责显示运行此时的变量和其值

在该窗口中选中变量鼠标右键点击可以进行许多操作,主要操作有以下这些:

All Instances:打开一个对话框来显示该java类的所有实例,使用该功能需要java虚拟机支持实例的检索。

All References:打开一个对话框来显示所有引用了该变量的java对象,

Change Value:更改变量的值,该功能可以和Drop to Frame联合使用进行程序的调试。使用这两个功能就可以代替重新debug

Copy Variables:复制变量的值,尤其在变量值很长(比如json数据)的时候,这个功能就派上用场了。

Find:有的时候一个类中变量特别多的时候,可以进行查找。

Breakpoints View :


列出你在当前工作区间里设置的所有断点

Expressions View :


求当前表达式的值
比如我想要计算变量a+b的值,那么就可以在表达式视图中加一个表达式:a+b

设置断点


设置断点的方法如下:
1.右击代码编辑器左边的空白区域
2.点击Toggle Breakpoint

当然 快捷键 Ctrl+Shift+B 还有最常用的 双击空白区域 也可以

]]>
Eclipse 常用快捷键 https://bk.google2015.cn/eclipse-%e5%b8%b8%e7%94%a8%e5%bf%ab%e6%8d%b7%e9%94%ae/ Sat, 25 May 2019 01:06:17 +0000 https://bk.google2015.cn/?p=360 以下为Eclipse常用快捷键 加粗为本人常用的

Ctrl+1 快速修复(最经典的快捷键,就不用多说了)

Ctrl+D: 删除当前行

Ctrl+Alt+↓ 复制当前行到下一行(复制增加)

Ctrl+Alt+↑ 复制当前行到上一行(复制增加)

Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)

Alt+↑ 当前行和上面一行交互位置(同上)

Alt+← 前一个编辑的页面

Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)

Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性

Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)

Shift+Ctrl+Enter 在当前行插入空行(原理同上条)

Ctrl+Q 定位到最后编辑的地方

Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)

Ctrl+M 最大化当前的Edit或View (再按则反之)

Ctrl+/ 注释当前行,再按则取消注释

Ctrl+O 快速显示 OutLine

Ctrl+T 快速显示当前类的继承结构

Ctrl+W 关闭当前Editer

Ctrl+K 参照选中的Word快速定位到下一个

Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)

Ctrl+/(小键盘) 折叠当前类中的所有代码

Ctrl+×(小键盘) 展开当前类中的所有代码

Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)

Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)

Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)

Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)

Ctrl+Shift+F4 关闭所有打开的Editer

Ctrl+Shift+X 把当前选中的文本全部变味小写

Ctrl+Shift+Y 把当前选中的文本全部变为小写

Ctrl+Shift+F 格式化当前代码(超赞 不解释!!!)

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)

Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)

Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)

Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)

Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)

Alt+Shift+I 合并变量(可能这样说有点不妥Inline)

Alt+Shift+V 移动函数和变量(不怎么常用)

Alt+Shift+Z 重构的后悔药(Undo)

]]>
搭建Win10+deepin双系统 https://bk.google2015.cn/%e6%90%ad%e5%bb%bawin10deepin%e5%8f%8c%e7%b3%bb%e7%bb%9ffq%e5%bd%bb%e5%ba%95%e7%a6%bb%e5%bc%80%e5%a4%a7%e9%99%86/ Mon, 18 Mar 2019 16:21:17 +0000 http://bk.google2015.cn/?p=170 花了一下午的时间搭建好Win10和Deepin双系统

安装篇:

对于Deepin的安装这里不多说,详看官方教程 点我

安装完之后会出现鼠标转圈,显示不了主页的情况。(N显卡的恶心)

这里给出唯一的解决方案:

1)开机后按esc,然后选中deepin系统,点击enter进入,默认选中第一个,如下图所示,然后这个时候千万不要点击enter,这个时候应该按键盘上的e,进入grub编辑页面;

2)然后我们在菜单中的代码中,找到倒数第二行,会出现如下所示的代码:
linux /vmlinuz-4.15.0-29deepin-generic root=UUID=b66d8ffa-aed9-466c-bc12-6bb801e45901 ro splash quiet
上面这行表示加载linux内核文件,解释如上面所示。

(3)在quiet的后面空一格加上如下所示的代码:nouveau.modeset=0,然后按F10保存即可。这时会重新开始登录deepin系统,耐心等待进入桌面即可。

然而这只是临时解决方案,永久解决方案如下:

(1)开机后输入账号和密码,等待十几秒或者一分钟时间加载桌面,这个时候应该不会出现鼠标一直转圈圈的问题了
(2)按Ctrl+Alt+T进入打开终端,输入以下代码来打开grub配置文件:sudo gedit /boot/grub/grub.cfg,如下图所示:

注意:这时会提示你输入密码,也就是超级用户的密码,因为这是系统文件,普通用户是不能进行更改的。(如果你是第一次刚安装好系统第一次进入系统的话,你输入你的登录密码会提示认证失败,因为那个是你的登录密码,而不是超级用户密码,这时后,你需要修改你的超级用户密码,如下图所示:)

(3)输入密码成功后会打开你的grub.cfg文件,如图所示,然后按Ctrl+F搜索quiet,并在第第一个quiet后面空一格加上这行代码:nouveau.modeset=0,并保存退出。

4)开机重启,问题已经永久解决!

美化篇:

这里推荐2款应用,可以在应用商店下到。

可以模拟IMAC的上顶栏
可以模拟IMAC主题

应用篇:

Deepin的大多数应用,应用商店都有了。而有些win使用的应用Deepin无法使用,例如QQ音乐,这里使用wine来解决

打开命令行,输入:sudo apt-get install wine

安装完成后,下载QQ音乐的安装包

然后安装:

示例:wine xx.exe     
实例:wine QQMusic.exe

安装完成,启动(或多或少会有编码和一些问题)

翻墙篇:!!!

Deepin没有直接提供ss工具,这里我们需要用到一个开源项目:点我

下载其中的deb文件,利用Deepin的软件安装器安装,

安装完成后配置好就可以使用了。

这里让我震惊的是SSR在Deepin下的速度是真的快,

我的服务器在WIN最多也就1000kb/s 而在Deepin却...

也许这就是linux吧.

]]>
利用JAVA扒某写真网站(附代码和图片) https://bk.google2015.cn/%e5%88%a9%e7%94%a8java%e6%89%92%e6%9f%90%e5%86%99%e7%9c%9f%e7%bd%91%e7%ab%99/ Wed, 26 Dec 2018 20:54:00 +0000 http://bk.google2015.cn/?p=128 在敲代码时,弹出广告,广告大概这个样子

咦,小姐姐,cosplay,点进去看看。
好多漂亮的妹子,页面打开很流畅,产品体验极佳。

不过每组图片只能看,如果想打包下载得花rmb。

ctrlC+ctrlV几张后不乐意了,这么保存一来看不到全部图片,二来,麻烦,太麻烦了。
试试吧,看能不能发现点有趣的东东。首先习惯性的看看html源码。

可以看到图片地址几乎都已经出来了,缩略图在前,原图在后,嗯,有点意思,开始扒。

用JAVA写爬虫,配合之前学的ConnectionUtil工具,敲了一晚上,总算把数据爬出来了,

不得不说 ,JAVA的url编码真的恶心,会将整个url链接都进行编码,我也是搞了好大功夫才将中文编码问题解决。

图片还在扒,扒完之后分享。

2018-12-27 更新代码

HomePage类 扒的是图片网址每一个主题图片的网址

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @version 1.0
 * @author 苦逼的年轮
 *
 */
public class HomePage {
	public static void main(String[] args) {
		int Picnum;// 这个是网页的页面数
		for (Picnum = 1; Picnum < 2; Picnum++) {
			String url = "https://amlyu.com/page/" + Picnum;
			String result = ConnectionUtil.Connect(url);
			result = result.replaceAll(" ", "");// 将页面中的空格去除,方便使用正则表达式
			Matcher m = Pattern
					.compile("<atarget=\"_blank\"href=\"https://amlyu.com/[\\s\\S]{1,100}/\">[\\s\\S]{1,70}</a>")
					.matcher(result);// 通过正则表达式匹配图片的网址
			int i = 0;
			while (m.find())
				i++;// 通过i得出有多少个页面 方便设计数组
			String[] stu = new String[i];// 设计图片网址数组
			Matcher m2 = Pattern
					.compile("<atarget=\"_blank\"href=\"https://amlyu.com/[\\s\\S]{1,100}/\">[\\s\\S]{1,70}</a>")
					.matcher(result);// 通过正则表达式匹配图片的网址
			int num = 0;
			while (m2.find()) {
				stu[num++] = m2.group();// 将网址数据存入数组
			}

			for (int j = 0; j < stu.length; j++) {
				int Nbegin = stu[j].indexOf("\">");
				int Nfid = stu[j].indexOf("</a>");
				String name = stu[j].substring(Nbegin + 2, Nfid);// 采集图片网址名称
				System.out.println("资源名:" + name);
				int Xbegin = stu[j].indexOf("https://amlyu.com/");
				int Xfid = stu[j].indexOf("\">");
				String ImgUrl = stu[j].substring(Xbegin, Xfid);// 采集图片网址地址
				System.out.println(("资源地址:" + ImgUrl));
				System.out.println("-----开始采集----");
				// 传入图片网址名称(交给SubPage创建文件夹) 和图片网址(进行下载)
				SubPage.Start(name, ImgUrl);
				System.out.println("-----结束采集----");
				System.out.println();
			}

		}
	}
}

SubPage类 扒当前图片页面所有的图片网址

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @version 1.0
 * @author 苦逼的年轮
 *
 */
public class SubPage {
	public static void Start(String name, String ImgUrl) {
		File file = new File("D:/Pic/");// 创建一个文件夹用于存储文件
		if (!file.exists()) {// 如果文件夹不存在
			file.mkdir();// 再创建文件夹
		}
		file = new File("D:/Pic/" + name + "/");// 通过采集到的网址名称创建图片文件夹
		if (!file.exists()) {// 如果文件夹不存在
			file.mkdir();// 再创建文件夹
		}
		String result = ConnectionUtil.Connect(ImgUrl);
		result = result.replaceAll(" ", "");// 将页面中的空格去除,方便使用正则表达式
		Matcher m = Pattern.compile("src=\\\"https://amlyu.com/[\\s\\S]{1,100}\"alt=\"[\\s\\S]{1,100}\"title")
				.matcher(result);// 采集图片网址
		int i = 0;
		while (m.find()) {
			i++;// 通过i得出有多少张图片 方便设计数组
		}
		String[] stu = new String[i];
		Matcher m2 = Pattern.compile("src=\\\"https://amlyu.com/[\\s\\S]{1,100}\"alt=\"[\\s\\S]{1,100}\"title")
				.matcher(result);
		int ImgNum = 0;
		while (m2.find()) {
			stu[ImgNum++] = m2.group();// 将图片网址录入数组
		}

		for (int ImgDownNum = 0; ImgDownNum < stu.length; ImgDownNum++) {
			int Xbegin = stu[ImgDownNum].indexOf("src=\"");
			int Xfid = stu[ImgDownNum].indexOf("\"alt=");
			String DownUrl = stu[ImgDownNum].substring(Xbegin + 5, Xfid);// 采集图片下载地址
			System.out.println("第" + (ImgDownNum + 1) + "张图片 下载地址:" + DownUrl);
			// 传入图片网址名称(告诉DownImg图片属于哪个目录) 图片下载地址 图片的张数
			DownImg.Img(name, DownUrl, ImgDownNum);
		}
	}
}

DownImg类 将图片分类下载到D盘的Pic文件夹下


import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @version 1.0
 * @author 苦逼的年轮
 *
 */
public class DownImg {
	public static void Img(String name, String DownUrl, int ImgDownNum) {
		try {
			String reg = "[\u4e00-\u9fa5]+";
			Pattern pattern = Pattern.compile(reg);
			Matcher matcher = pattern.matcher(DownUrl);
			while (matcher.find()) {// 重复把汉字进行编码替换
				String han = matcher.group(0);// 正则匹配url中的汉字
				String bmurl = URLEncoder.encode(han, "UTF-8");// 将汉字进行编码
				String start = DownUrl.substring(0, DownUrl.indexOf(han));// 取出出现汉字的前部分
				String len = DownUrl.substring(DownUrl.indexOf(han) + han.length(), DownUrl.length());// 取出出现汉字的后部分
				DownUrl = start + bmurl + len;// 将汉字编码和前后连接形成新的连接
			}
			System.out.println("第" + (ImgDownNum + 1) + "张图片下载成功");
			URL url = new URL(DownUrl);
			// 这里用到 openStream 相比openConnection 后者会得到 modification date 和 http header
			// 等东西,而此刻我们不需要
			DataInputStream dataInputStream = new DataInputStream(url.openStream());// 创建数据输入流
			String imageName = "D:/Pic/" + name + "/" + (ImgDownNum + 1) + ".jpg";// 图片路径
			FileOutputStream fileOutputStream = new FileOutputStream(new File(imageName));// 输出流
			ByteArrayOutputStream output = new ByteArrayOutputStream();// 字符缓冲区
			byte[] buffer = new byte[1024];
			int length;// 读取字符的长度
			while ((length = dataInputStream.read(buffer)) > 0) {
				output.write(buffer, 0, length);
			}
			fileOutputStream.write(output.toByteArray());// 输出图片
			dataInputStream.close();
			fileOutputStream.close();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

将代码进行了美化,现在扒下的结果显示:

期待已久的来了 图片打包下载地址:

链接: https://pan.baidu.com/s/1qJD1Bb__bQl6lP3U3S0T-Q 提取码:4g4n

]]>
Java和web方向的学习路线 https://bk.google2015.cn/java%e5%92%8cweb%e6%96%b9%e5%90%91%e7%9a%84%e5%ad%a6%e4%b9%a0%e8%b7%af%e7%ba%bf/ Tue, 04 Dec 2018 06:54:26 +0000 http://bk.google2015.cn/?p=122 Javaweb系统学习路线:

 

Java系统学习路线:

第一阶段 技术名称 第一阶段: Java 基础,包括 Java 语法,面向对象特征,常见API,集合框架。(基础)

第二阶段:Java API:输入输出,多线程,网络编程,反射注解等,Java 的精华部分。(重点)

J2SE(java基础部分) java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程,

相关反编译工具介绍,java开发工具Eclipse的安装和使用,javadoc的说明。

Java基础语法 Java语法格式,常量和变量,变量的作用域,方法和方法的重载,运算符,程序流程控制,数组和操作数组的类,

对数组循环遍历以及针对数组的常用查找、排序算法原理,最后使用Java程序进行功能实现。

面向对象编程 理解对象的本质,以及面向对象,类与对象之间的关系,如何用面向对象的思想分析和解决显示生活中的问题,

并java程序的手段编写出来。

如何设计类,设计类的基本原则,类的实例化过程,类元素:构造函数、this关键字、方法和方法的参数传递过程、

static关键字、内部类,Java的垃圾对象回收机制。

对象的三大特性:封装、继承和多态。子类对象的实例化过程、方法的重写和重载、final关键字、抽象类、接口、

继承的优点和缺点。 对象的多态性:子类和父类之间的转换、父类纸箱子类的引用、抽象类和接口在多态中的应

用、多态优点。常用设计模式如单利、模版等模式。

什么是异常 异常的捕捉和抛出 异常捕捉的原则 finally的使用,package的应用 import关键字。

多线程应用 多线程的概念,如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、

死锁问题的剖析。

javaAPI详解 JavaAPI介绍、String和StringBuffer、各种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。

常用的集合类使用如下:Java Collections Framework:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、

TreeMap、Iterator、Enumeration等常用集合类API。

IO技术 什么是IO,File及相关类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应缓冲流和管道流,字节和字符的转化流,包装流,以及常用包装类使用,分析java的IO性能。
网络编程 Java网络编程,网络通信底层协议TCP/UDP/IP,Socket编程。网络通信常用应用层协议简介:HTTP、FTP等,以及WEB服务器的工作原理。
java高级特性 递归程序,Java的高级特性:反射、代理和泛型、枚举、Java正则表达式API详解及其应用。
第二阶段 技术名称 第三阶段:数据库 SQL 基础,包括增删改查操作以及多表查询。Oracle Mysql 二选一吧。(我的项目都是用的 Mysql
数据库技术 Oracle 基础管理 Oracle背景简介,数据库的安装,数据库的用户名和密码,客户端登录数据库服务SQLPLUS,数据库基本概。
SQL语句 数据库的创建,表的创建,修改,删除,查询,索引的创建,主从表的建立,数据控制授权和回收,事务控制,查询语句以及运算符的详解,sql中的函数使用。
多表连接和子查询 等值和非等值连接,外连接,自连接;交叉连接,自然连接,using子句连接,完全外连接和左右外连接,子查询使用以及注意事项。
触发器、存储过程 触发器和存储过程使用场合, 通过实例进行详解。
数据库设计优化 WHERE子句中的连接顺序,选择最有效率的表名顺序,SELECT子句中避免使用 ‘ * ‘ 计算记录条数等等。
数据备份与移植 移植技巧,备份方案;导入导出等。
第三阶段 技术名称 第四阶段: JDBC 编程:包括 JDBC 原理, JDBC 连接库, JDBC API,虽然现在Hibernate 比 JDBC 要方便许多,但是 JDBC 技术仍然在使用, JDBC 思想尤为重要。

第五阶段: JDBC 深入理解高级特性:包括数据库连接池,存储过程,触发器,CRM 思想(高级)这个比较不好懂,有时间的可以学习。

jdbc技术 JDBC基础 JDBC Connection、Statement、PreparedStatement、CallableStatement、ResultSet等不同类的使用。
连接池技术 了解连接池的概念,掌握连接池的建立、治理、关闭和配置。
ORM与DAO封装 对象关系映射思想,jdbc的dao封装,实现自己的jdbc。
第四阶段 技术名称 第六阶段: Servlet 开发,从此开始踏入 JavaWeb 开发的重要一步,包括XML,Tomcat 服务器的安装使用操作, HTTP 协议简单理解,Servlet API 等, Java Web 开发的基础。(重要)

第七阶段: JSP 开发: JSP 语法和标签,自定义标签, EL , JSTL 库了解以及MVC 三层架构的设计模式理念。

web基础技术

(项目实战)

Xml技术 使用jdom和dom4j来对xml文档的解析和生成操作,xml 的作用和使用场合。
html/css Java掌握基本的html标签的格式和使用,css层叠样式表对div的定义,实现对网站布局的基本实现。
Javascript 了解javascript的基本语法以及相关函数的使用,并结合html页面实现流程控制和页面效果展示。

什么是异常 异常的捕捉和抛出 异常捕捉的原则 finally的使用,package的应用 import关键字。

jsp/servlet Servlet和SP 技术、上传下载、 Tomcat 服务器技术、servlet 过滤器和监听器。
jstl和EL JSTL核心标签库、函数标签库、格式化标签库、自定义标签技术、EL表达式在jsp页面的使用。
ajax及框架技术 了解和属性原生态的ajax的使用,ajax使用的场合,使用ajax的好处,ajax框架jquery渲染页面效果和相关的强大的第三方类库,dwr如何和后台服务进行数据传输,以及页面逻辑控制等。
JSON高级应用 Java使用json支持的方式对字符串进行封装和解析,实现页面和java后台服务的数据通信。
Fckeditor编辑器 FCKEditor在线编辑器技术、配置、处理图片和文件上传。
javaMail技术 了解域名解析与MX记录、电子邮件工作原理、邮件传输协议:SMTP、POP3、IMAP、邮件组织结构:RFC822邮件格式、MIME协议、邮件编码、复合邮件结构分析、JavaMail API及其体系结构、编程创建邮件内容:简单邮件内容、包含内嵌图片的复杂邮件、包含内嵌图片和附件的复杂邮件。
JfreeChart报表 统计报表;图表处理。
BBS项目实战 采用Jquery+dwr+jsp+servlet+Fckeditor+JfreeChart+tomcat+jdbc(oracle) 完成BBS项目的实战。
第五经典阶段 技术名称 第八阶段:三大框架- Spring 、 SpringMVC 、 MyBatis , JavaWeb 的精华部分(重要)

第九阶段:当学习完这些知识后,你就可以深层次的学习一些企业框架, Maven、 redis 、 log4j 等等。

web主流框架技术

(项目实战)

struts2.x struts2框架的工作原理和架构分析,struts-default.xml与default.properties文件的作用,struts。Xml中引入多个配置文件。OGNL表达式、Struts2 UI和非UI标签、输入校验、使用通配符定义action、动态方法调用、多文件上传、自定义类型转换器、为Action的属性注入值、自定义拦截器、异常处理、使用struts2实现的CRUD操作的案例。
hibernate3.x Hibernate应用开发基础; ORM基础理论; 关系映射技术; 性能调优技术; 性能优化 一级缓存 二级缓存 查询缓存 事务与并发 悲观锁、乐观锁。
spring3.x Spring IoC技术; Spring AOP技术; Spring 声明事务管理; Spring 常用功能说明,spring3.0的新特性, Spring整合struts2和hibernate3的运用。
Log4j和Junit Logging API; JUnit单元测试技术; 压力测试技术:badboy 进行测试计划跟踪获取以及JMeter压力测试。
在线支付技术 完成支付宝的支付接口的在线支付功能。
电子商务网实战 采用spring3+hibernate3+struts2+jquery+dwr+FckEditor+tomcat 完成电子商务网站实战开发。
第六进阶阶段 技术名称 技术内容
web高级进阶

(项目实战)

openJpa技术 JPA介绍及开发环境搭建、单表实体映射、一对多/多对一、一对一、多对多关联、实体继承、复合主键、JPQL语句、EntityManager API、事务管理,了解一下jpa2.0的新特性以及应用。
lucene搜索引擎 了解全文搜索原理、全文搜索引擎、什么是OSEM、OSEM框架Compass、基于使用Lucene使用Compass实现全文增量型索引创建和搜索、探索Lucene 3.0以及API。
电子商务网重构 此项目采用了Lucene+compass+openJpa+上一版电子商务网站的技术进行重构。
Excel/PDF文档处理技术 java对excel和pdf文档分别利用poi和itext来进行解析和生成。此技术在企业级系统的报表中经常使用。
OA工作流技术JBPM 工作流是什么、JBPM介绍、JBPM的主要用法、各类节点的用法、任务各种分派方式、JBPM的整体架构原理、工作流定义模型分析、运行期工作流实例模型分析、数据库表模型分析、流程定义管理、流程实例监控、对JBPM的相关接口进行封装,构建自己的工作流应用平台等。
WebService技术 WebService技术原理、WebService技术的应用、Soap服务的创建与管理、WSDL描述文档规范、UDDI 注册中心运行原理;使用Axis和Xfire创建WEB服务、Webservice客户端的编写、使用TCPMonitor监听SOAP协议、异构平台的整合。
Linux技术 Linux 系统安装,卸载、linux 使用的核心思想、linux下的用户管理,文件管理,系统管理、程序的安装,使用,卸载。linux下作为server的基本应用:web服务器,j2ee服务器,ftp服务器的安装和项目的部署。
CRM项目实战 此项目能了解和熟悉客户关系管理的基本流程以及功能的实现,采用上面几个阶段学到的主流框架实现,同时加入了JBPM的技术。
第七架构阶段 技术名称 技术内容
大型高并发网站优化方案

(项目实战)

如何构建一个高性能网站详解 什么样的网站需要高性能,高性能的指标体系,构建高性能网站需要做哪些工作,注意哪些细节。
SSI技术 什么是SSI,使用他有什么好处,什么样的系统才使用SSI,SSI技术详解和使用,应用到项目中。
生成静态页技术 什么是静态页,为什么需要静态页以及带来的好处,生成静态页的模版技术Velocity和Freemark,生成静态页的访问规则等。
缓存技术 为什么使用缓存技术,oscache缓存技术的介绍和使用,memcached缓存技术的介绍和使用、两者缓存技术的比较和如何去使用。
经典web服务器 什么是web服务器,什么是javaweb服务器,他们存在什么关系,当前技术主流中常用的web服务器有哪些, web服务器apache和nginx的应用。
nginx架构实战 什么是反向代理,负载均衡以及集群,在nginx中如何实现这些高性能的系统架构。

 

 

一:入门阶段

学习目标:Java程序员

1: 熟悉jdk,jvm,eclipse,安装于配置jdk

2:熟悉并掌握java的基础语法,类,抽象类,接口,内部类等概念

3: java核心编程,如输入输出流,多线程,集合,XML,正则表达式等

4:java图形化编程,如awt,swing

5:java网络编程,Applet,Socket,TCP/IP,NIO等

6:java高级特性,如反射,泛型,自动装箱与拆箱等

二:提高阶段

学习目标:java初级软件工程师

1:网页开发技术,如HTML,CSS,JavaScript,AJAX

2:java与数据库开发技术,如SQL,MySql,Oracle,SQL Server,JDBC

3:JavaWeb核心开发技术,如JavaBean,Servlet,EL等

三:加强阶段

学习目标:Java中级软件工程师

1:Hibernate框架

2:iBATIS框架

3:Struts1框架

4:Struts2框架

5:Spring业务层框架

四:进阶阶段

学习目标:Java高级软件工程师

1:Java Web企业级开发技术,如会话Bean,消息驱动Bean

2:Java Web分布式开发技术,如JTA,JAAS,JNDI

3:Java Web开源技术与框架,如工作流,规则引擎,缓存,报表

五:高级阶段

学习目标:Java系统架构师

1:Java与UML,如对象图,用例图,组件图,部署图

2:Java设计模式:外观、适配单观察者、装饰等

3:Web服务架构:WebService,SCA,SOA,ESB,EAI

4:面向资源架构:ROA,REST

5:面向云架构:COA、SaaS、分布式计算、云计算

]]>