原文地址:【intellij idea】Project Structure 讲解 作者:championhengyi 发表于2017/11/6 17:58:12 原文链接 阅读:0 评论:0 查看评论 继续阅读 >>


董恒毅 17/11/06 17:58:12
IDEA报错如下: Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1465) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1310) 解决办法: 1.将 org.apache.commons.commons-dbcp2 和 org.apache.commons.commons-pool2 jar包同时添加进pom.xml文件并在Project Structure 的 Artifacts模块中将这两个依赖添加进WEB-INF中的lib下,如图: 这是没有添加进WEB_INF的时候,添加成功后右边的栏目会和并到左边的WEB_INF下的lib中,只要 继续阅读 >>


董恒毅 17/11/06 17:49:28
什么是缓存Cache? 为什么人们要使用它? 一个使用缓存Cache的站点会监听客户端向服务器端发出的请求,并保存服务器端的回应——比如HTML页面、图片等文件。接着,如果再次使用相同URL发送请求,他能够使用之前已经保存下来的反馈文件,而不是再次向服务器发出请求。 有两个主要的理由让人们使用缓存: 减少延迟 — 因为所发出的网页请求是指向更接近客户端的缓存而不再是源服务器端,因此请求所花费时间更短,这让网站看上去反应更快。 降低网络负荷 — 因为缓存文件可以重复使用,节省了不少的带宽.这也给用户省了不少流量. 缓存 Caches种类 浏览器缓存 Caches 浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。 Expires策略(忽略) Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。 不过Expires是HTTP 1.0的东西,现在默认浏览器均默认使用 继续阅读 >>


董恒毅 17/11/01 11:46:48
之所以将属性表拿出来单独进行讲解,就是因为在上一篇博客中我已经说过,在Class类文件中,最重要的当属常量池与属性表部分,而属性表中的属性目前已高达21项,当然我们不用全部记住它们,只需要熟悉其中的几个关键属性。 属性表基本结构 首先来看一下这21种不同的属性: 图片来源于他人博客。可以看到的是,在JDK1.5之前是只有9中基本属性的,在之后增加到了21项。 每个属性的名称都引用自常量池中一个CONSTANT_Utf8_info类型的常量来表示,属性值的结构则完全是自定义,只需要一个u4长度属性去说明属性值所占用的位数即可。 属性表结构如图: Code属性 Java方法体中的代码经过Javac编译之后,最终变为字节码存储在Code属性中,Code属性出现在方法表的属性集合之中。接口或抽象类中的方法并不存在Code属性,因为他们并没有对方法进行具体的实现。 Code属性表的结构如下图: 在这里我尝试挑几个概念上比较重要来进行记录。 max-stack,要解释清楚它,需要了解操作数栈,栈帧等知识,所以这个属性字段 继续阅读 >>


董恒毅 17/10/30 16:10:04
首先来看一段代码: #include<stdio.h> void foo(const char **p) { } void main(int argc, char **argv) { foo(argv); return ; } 我们对这段代码进行编译,发现它报出了警告: test.c: In function ‘main’: test.c:14:9: warning: passing argument 1 of ‘foo’ from incompatible pointer type [-Wincompatible-pointer-types] foo(argv); ^ test.c:10:6: note: expected ‘const char **’ but argument is of type ‘char **’ void foo(const char **p) { } ^ 一般来说,对程序运行结果没有影响的警告我们会进行忽略,但是这个程序很短,非常易读 继续阅读 >>


董恒毅 17/10/27 00:24:51
不知道大家有没有对.java文件进行编译之后生成的.class文件好奇过。 我们都知道Java中的class文件是经过Java编译器对Java类文件进行编译后的产物。我想有不在少数的C程序员在学习Java之后在认知上会粗略的认为C程序在经过编译后产生的.out文件与.class文件在各方面大概相同,我刚开始也这样迷惑自己,但是随着学习的深入,我们必须搞清楚.class文件到底是个什么东西。 那么今天我就为大家来分享一下Java中的.class文件到底是什么,它里面到底存储了哪些内容~ 对了,如果你用IDEA这种环境集成开发工具来查阅.class文件的话,会发现它和源代码并没有什么区别,因为它将.class文件顺便进行了反编译。 .class文件和.out文件的不同 要想明白两个文件的不同,我们首先要了解两个文件的定义。 .class文件 java的编译器在编译java类文件时,会将原有的文本文件(.java)翻译成二进制的字节码,并将这些字节码存储在.class文件。 也就是说java类文件中的属性、方法,以及类中的常量信息,都会被 继续阅读 >>


董恒毅 17/10/20 23:50:16
useradd命令 useradd 选项 用户名 -d 目录,指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。 -g 用户组,指定用户所属的用户组。 -G 用户组,指定用户所属的附加组。 -s Shell文件,指定用户的登录Shell。 -u 用户号,指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。 例1: # useradd –d /home/sam -m sam 添加了一个用户sam,并且他的主目录为/home/sam,没有主目录的时候自动创建。(/home为默认的用户主目录所在的父目录) 例2: useradd -s /bin/sh -g group –G adm,root gem 添加一个用户gem,使用的Shell是/bin/sh,主用户组为group,附加组为adm,root。 userdel命令 userdel 选项 用户名 -r 把用户的主目录一起删除。 usermod命令 usermod 选项 用户名 例 继续阅读 >>


董恒毅 17/10/20 11:46:02
先说点题外话吧,在我刚开始学习爬虫的时候,有一次一个学长给了我一个需求,让我把京东图书的相关信息抓取下来。恩,因为真的是刚开始学习爬虫,并且是用豆瓣练得手,抓取了大概500篇左右的影评吧,然后存放到了mysql中,当时觉得自己厉害的不行,于是轻松的接下了这个需求。。。 然后信心满满的开始干活。。首先查看网页源代码。。。???我需要的东西源代码里面没有!!!然后去问了学长。学长给我说,这是AJAX产生的数据,大概听完之后我就去查了资料。发现网上大片的资料都在阐述一个道理,对于动态页面,使用PhantomJs进行抓取,但是这样效率很低。作为一个优秀的程序员,当时看见效率很低这四个字,那在我心里是绝对不能被允许的,所以我就采用了抓包的方式,查看AJAX数据所在的URL,对于这个模拟浏览器的方法也就一直搁置到现在。 但是既然知道了这个东西,哪有不去学习的道理。所以我抽出了一点时间看了一下关于Java方面使用PhantomJs的资料,现在分享给大家。 对了,其实做网络爬虫,页面上90%的数据都可以使用抓包进行获取。所以我还是鼓励大家直接请求自己所需数据所在的URL 继续阅读 >>


董恒毅 17/10/10 22:29:57
最近打算通过学校的某某系统抓取一下每个学生的个人信息,由于需要进行模拟登录,所以就要对登录页面进行post参数的提交。但是在进行网络抓包的过程中,使用chrome自带的网络抓包分析工具(也就是F12)发现每次在进行登录提交表格之后,chrome并不能将所需要提交的参数表单抓取下来。 问了学长原因,觉得是登录成功之后因为页面的跳转需要进行刷新,所以就将表单提交的那部分数据给刷掉了。学长提供的解决办法是使用fiddler网络抓包工具进行抓包及分析。但在查阅相关资料之后发现fiddler对Linux操作系统(本人开发环境Ubuntu 16.04)的支持并不是很好。所以我使用了tcpdump进行网络抓包,结合wireshark进行数据包的分析。 需求如下: 如图,提交登录表单的页面,然后使用chrome自带抓包工具进行网络抓包: 这里面并没有我想要的东西。 tcpdump的使用 tcpdump [-i 网卡] -nnAX ‘表达式’ 各参数说明如下: -i:interface 监听的网卡。 -nn:表示以ip和por 继续阅读 >>


董恒毅 17/09/24 16:00:03
作为被面试官最喜欢问到的23种设计模式之一,我们不得不熟练掌握单例模式以及洞悉多线程环境下,单例模式所存在的非线程安全问题以及它的解决方式。 注:这篇文章主要讲述多线程环境下单例模式存在的非线程安全问题,并不详细讲述单例模式。 何为单例模式 首先我们先大概了解一下单例模式的定义: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 单例模式的应用非常广泛,例如在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。选择单例模式就是为了避免不一致状态。 单例模式的实现有三种方式:饿汉式(天生线程安全),懒汉式,登记式(可忽略)。 对于上面单例模式的实现方式我在这里不做过多介绍,我们着重来看一下懒汉式在多线程环境下出现的问题以及它的解决策略。 设计线程安全的单例模式 D 继续阅读 >>


董恒毅 17/08/29 14:14:58