下载源代码 点击这个链接:http://www.scala-lang.org/download/all.html; 选择需要的版本点击打开; 在新打开的网页下方找到源代码下载项: 在intellij idea设置指向源代码 在intellij中打开File –> Project Structure,快捷键(Ctrl + Alt + Shift + s); 选择Global Libraries –> 目标SDK; 在右侧面板中的Scala Library下方点击“+”按钮; 选择解压后的源码包的src目录; apply即可。 看个截图好了: 参考:http://stackoverflow.com/questions/13520532/attaching-sources-in-intellij-idea-for-scala-project ####
[阅读更多...]-
intellij idea查看scala sdk的源代码
-
Python网络爬虫2 – 请求中遇到的几个问题
这次尝试下怎样搜索电影并解析出磁力链接信息。 搜索的网址是:https://www.torrentkitty.tv/search/。 开始了! 使用FireFox打开上面的网址,输入要搜索的电影。在点击搜索按钮前记得打开FireBug,并激活“网络”页签。 查看了请求的详情有些哭笑不得:点击搜索按钮后网页跳转到了这样的地址:https://www.torrentkitty.tv/search/蝙蝠侠/——很明显的REST风格的请求。这样,我们要搜什么内容直接将要搜索的内容拼装到请求地址中就行了。搜索的代码是这样的: 执行后报错了,报错信息如下: 根据错误栈信息可以看出是在发送http请求时报错的,是因为编码导致的错误。在python中使用中文经常会遇到这样的问题。因为是在http请求中出现的中文编码异常,所以可以考虑使用urlencode加密。 在python中对字符串进行urlencode使用的是parse库的quote方法,而非是urlencode方法: 再次执行请求,依然报错了: 报的是HTTP 403错误。这样的错误我遇到过几次,一般是因为没有设置UserAgnet,是网站屏蔽爬虫抓取的一种方式。通过FireBug可以从headers中获取到User-Agent信息: 获取到header信息后再调整下我们的代码,这次会需要使用一个新的类Request: 修改后依然在报错: 请求超时了,估计是因为网站在境外的缘故。所以还需要设置一个请求超时时间,只需要添加一个参数: 这样调整后终于请求成功了。需要强调下,这里的超时设置的时间单位是秒。 总结下吧,这次一共遇到了三个问题: 中文编码的问题; HTTP403错误的问题; 请求超时时间设置的问题。 完整的代码在这里,稍稍作了些调整,还添加了post请求的代码。在pot请求的代码中对字典型的参数调用了urlencode方法: 就是这样。这次本来是想说些关于网页解析的内容的,不过后来发现还是有很多的内容需要先说明下才好进行下去。关于网页解析的内容就挪到了下一节。 这里有篇文章不错,说明了urllib中几个常见的问题:http://www.cnblogs.com/ifso/p/4707135.html ##########
[阅读更多...] -
Python网络爬虫1 – 简单的Http请求
最近这段时间会有需要写一个网络爬虫。会在这里将实现网络爬虫的经验记录下来。 爬虫什么的,只是一个名字罢了。简单地说,也都是从http请求开始的。 Python实现http请求主要依赖的是urllib.request模块。例如发送http get请求: 就是这么简单。 通常,在命令行打印出来的是网页的源代码。想从中过滤出来需要的信息需要进行匹配和筛选。比如使用正则式匹配获取title和body中的内容: 对于一些采集程序来说做到这里就够了。如果我们要的是网页的内容而非网页的html,则需要使用比正则表达式更强大的工具。在下一节会用一个实例介绍相关的内容。 附上完整的程序: #########
[阅读更多...] -
MemoryAnalyzer介绍及使用
Eclipse Memory Analyzer Tools(MAT)是一个功能丰富且轻量的 Java 堆内存分析工具,可以用来辅助发现内存泄漏减少内存占用。 使用 Memory Analyzer 来分析生产环境的 Java 堆转储文件,可以从数以百万计的对象中快速计算出对象的 Retained Size,查看是谁在阻止垃圾回收,并自动生成一个 Leak Suspect(内存泄露可疑点) 报表。Memory Analyzer 有两种使用方式: 一种是下载独立版本的 MAT, 一种是使用嵌入到 Eclipse 中的 MAT插件。 我这里是用的 eclipse 插件。 如果平时用的是其他 IDE, 可以尝试使用独立版 MAT。 前段时间整理了一下Memory Analyzer相关的内容,包括文档及几个适用案例,目录大致如下: Memory Analyzer使用文档(保存在CSDN); 关于Heap Dump; 使用MAT找出重复引用的jar或类; 使用MAT分析内存泄漏; 找出被空集合占用的内存; 使用MAT分析Java集合的使用。
[阅读更多...] -
IntelliJ Idea 复制粘贴的问题
分析 尝试从外部复制内容向Idea工作空间内粘贴文件时,有一定的几率会发生复制粘贴失败的问题:复制了新的内容,粘贴的却还是早些时候复制的旧的内容。 我使用的IDEA是最新版(2016.1.3),操作系统是Win7/Win10。 这个问题是因为Idea的历史粘贴板已经满了,无法向历史粘贴板中写入新的内容导致的。这应该是Idea的一个BUG。 解决思路有两个: 增加历史粘贴板的深度; 将历史粘贴板中的部分内容删除,腾出空间来。 增加历史粘贴板的深度 要做这个调整需要修改设置了。选择File > Settings > Editor > General,下拉右侧的滚动条,找到 Maximum number of contents to keep in clipboard,修改这个对应的值。默认是5,修改成50好了。 下次要找这个设置项可以直接在设置的搜索框中搜索“max clipboard”。 删除历史粘贴板中的内容 打开历史粘贴板比较简单:使用Ctrl+Shift+V组合键即可。但是要删除历史粘贴板中的内容时却不知道该如何下手。 查了些资料,也是使用一个快捷键:选中要删除的目标,使用Shift+Delete组合键即可完成删除。 在idea的默认KeyMap中,Shift+Delete执行的是cut(剪切)操作。而delete line的快捷键是Ctrl+Y。也都试验过,Ctrl+Y不起作用,只有Shift+Delete起作用。 #########
[阅读更多...] -
Java实现邮件发送过程中遇到的几个问题
发送邮件的代码是我从以前的一个应用上直接拷贝过来的。以前使用的腾讯的邮件服务,程序执行起来没有任何问题。后来修改为微软office365邮件服务后,却遇到了两个问题。 问题一,tls加密设置 异常信息如下: 这个解决起来比较容易。找了些资料,添加如下配置即可: 问题二,提示协议为null: 异常信息如下: 这个问题是在将应用部署到生产环境后才遇到的。经检查后发现调用的jar包不是我在maven中指定的版本。后来确认是应用使用的jar包和容器(就是jetty)使用的jar包冲突了。容器使用的jar版本较旧,不过默认优先加载容器的jar。这样问题解决思路有两个: 依赖容器的jar重新写代码; 更新容器的jar。 第二个选择多少有些危险,就采用第一个选项好了,只需要修改一行即可: 这个问题在javax.mail 1.4版本中会出现。之后较高的版本会默认采用SMTP协议发送邮件。 修改后的程序: ##
[阅读更多...] -
关于Heap Dump
Heap Dump是什么? Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。 我们可以通过Heap Dump做哪些事情? 一般在Heap Dump文件中可以获取到(这仍然取决于heap dump文件的类型)如下信息: 对象信息:类、成员变量、直接量以及引用值; 类信息:类加载器、名称、超类、静态成员; Garbage Collections Roots:JVM可达的对象; 线程栈以及本地变量:获取快照时的线程栈信息,以及局部变量的详细信息。 也就是说我们可以对上面这些内容进行分析。通常可以基于Heap Dump分析如下类型的问题: 找出内存泄漏的原因; 找出重复引用的jar或类; 分析集合的使用; 分析类加载器。 总而言之我们对Heap Dump的分析就是对应用的内存使用进行分析,从而更加合理地使用内存。 怎样获取Heap Dump? 获取heap dump有多种方式,可以通过参数配置在特定的条件下触发堆转储,也可以通过工具来获取。 1. 通过OutOfMemoryError获取heap dump 通过设置如下的JVM参数,可以在发生OutOfMemoryError后获取到一份HPROF二进制Heap Dump文件: 生成的文件会直接写入到工作目录。 这个方案适用于如下版本的虚拟机:Sun JVM (1.4.2_12 or higher and 1.5.0_07 or higher), HP-UX JVM (1.4.2_11 or higher) and SAP JVM (since 1.5.0)。 2. 主动触发Heap Dump 也可以为虚拟机设置下面的参数,这样就可以在需要的时候按下CTRL+BREAK组合键随时获取一份heap dump文件。 3. 使用HPROF agent 使用agent可以在程序执行结束时或者收到SIGQUIT信号时生成dump文件。使用agent也是要配置虚拟机参数的: 这种方式我没有试过,具体如何做的不是很清楚。 4. 使用jmap 这个算是用的最多的方式了吧。也很简单,执行下面的命令就可以了: 5. 使用jconsole 启动一个应用后,打开<JAVA_HOME>/bin/jconsole.exe,在jconsole中选择正在运行的应用: (在这个例子中选择的是eclipse,虽然进程名称为空,但是通过重启eclipse可以确认)。 建立连接后,选择页签MBean,执行com.sun.management. HotSpotDiagnostic下的操作dumpHeap。第一个参数p0是要获取的dump文件的完整路径名,记得文件要以.hprof作为扩展名(要在Memory AnalysisPerspective下打开扩展名必须是这个)。如果我们只想获取live的对象,第二个参数p1需要保持为true。 建议将导出的dump文件保存到一个独立的文件夹,在接下来的分析中会通过这个文件创建很多图表文件。 6. 使用Memory Analyzer 如果要获取dump文件的Java进程和Memory Analyzer在同一台机器上,可以直接使用Memory Analyzer获取dump文件。采用这种方式获取dump文件后会直接将之解析并在Memory Analyzer中打开(这个方式我不太喜欢,因为会在用户目录下生成很多零碎的文件)。 获取heap dump是受虚拟机支持的一种特定的功能。Memory Analyzer提供了一些被称为Heap Dump Provider的概念:比如支持Sun虚拟机(需要用到Sun JDK的jmap功能)的Provider或支持IBM虚拟机(也需要一个IBM JDK)的Provider。此外,Memory Analyzer也提供了对用户自定义的Heap Dump Provider插件的扩展支持。 要使用Memory Analyzer获取dump文件需要先打开Memory AnalysisPerspective,而后点击File -> Acquire Heap Dump…菜单项。之后会打开如下窗口: 在上图中,根据具体的运行环境,预装的Heap Dump Provider按照默认设置展示了当前正在运行的java进程列表。一些Heap Dump Provider也允许(或者说需要)设置一些额外的参数(比如heap dump的类型),这个可以点击Configure按钮来设置。选择要dump的线程,点击Next按钮就可以生成dump文件了。 有的时候进程列表可能为空,这时有必要调整下Heap Dump Provider的设置了。点击Configure按钮,选择合适的provider并点击,然后找到要做调整的参数并做设置就好了。 此外,IBM的虚拟机还有自己的一套方法,这里就不写出了。 就这样! #######
[阅读更多...]