自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Effective Java读书笔记(4)—— 泛型

先简单说一下泛型,这是从Java5开始的一个重要新特性:比方说,我现在想建立一个容器,容器里存储的元素类型可以使任意类型(可以存储dog,也可以存储cat),当然一个容器对象只能存储某一种,不能一个容器寄存dog又存cat。在泛型出现之前,我们想实现上述的功能需要这么做:Object[] dogs = new Object[100];ArrayList dogs = new ArrayList...

2020-04-23 23:03:24 161

原创 Effective Java读书笔记(3)—— 类与接口

第四章:类与接口第一条:使类和成员的可访问性最小化一个设计良好的组件应该隐藏所有实现细节,只把必须要提供的功能通过API暴露出来,组件之间通过API进行通信。组件与组件之间的耦合越低越好,一个组件对于其他组件,除了API通信,应该一无所知。所以每个类或成员应该尽可能的不可访问。对于顶层的类和接口,不加任何修饰符则默认为包级私有,public修饰则为公共的,不能用其他修饰符修饰。包级私有...

2020-04-22 23:18:34 162

原创 Effective Java读书笔记(2)—— 所有对象通用的方法

这一章写的是对所有对象都通用的一些方法,换言之就是Object带有的一些方法(Object类是所有类的父类),在这些方法中非final的类都是被设计为需要重写的,重写时需要遵从一些通用的约定。第一条:使用try-with-resources语句代替try-finally语句在进行IO操作和JDBC数据库操作的时候,最终都要手动调用close()关闭资源(用finalizer机制也可以,但是...

2020-04-17 19:18:00 180

原创 Effective Java读书笔记(1)—— 创建和销毁对象

很久以前买的一本《Effective Java》,最近开始读啦!从第二章开始看(第一章是引言),每一章都有若干条建议,翻了一下感觉对日常编码有很强的指导意义呀,勤劳的我决定写个读书笔记记录一下????。第一条:考虑用静态工厂方法代替构造器说到静态工厂方法,书里给的例子是包装类型,也就是平时常会用到的Integer.valueOf(),Integer.parseInt()想必也算,返回的都是Int...

2020-04-16 17:00:18 160

原创 Java设计模式(4)——建造者(Builder)模式

在设计模式系列的前几篇文章里,记录过的工厂模式、单例模式都是为了创建对象而出现的,建造者模式也不例外。建造者模式的适用场景有的时候我们编写的类构造器有较多(超过4个)参数,有些参数是必须的,有些参数是可选的。针对这种情况,往往会编写多个构造器,比如:class Person{ String name; // 必须 int id; // 必须 int gend...

2020-03-09 15:57:53 131

原创 浅谈MySQL死锁

死锁是并发系统绕不开的问题,不管是Java并发编程、MySQL并发处理client请求,还是操作系统,都是如此。本篇文章主要记录一下MySQL死锁的原因、检测与预防解决。MySQL死锁实例首先在MySQL里,锁可以分为S锁(share共享锁)和X锁(Exclusive排它锁)。这两种锁可以直接理解为读锁(共享锁)和写锁(排它锁)。加了读锁的记录,不管是本事务还是其他事务都只能读;加了写锁...

2020-03-04 00:44:41 325

原创 Java并发编程(1)—— 实现一个生产者消费者队列(三种方式)

生产者消费者队列,顾名思义,就是一个队列,不停地有生产者在里面生产对象并通知阻塞的消费者可以消费了,如果队列满了,生产者就阻塞不能再生产;消费者来消费(也就是读取并拿走队列里的对象)并通知阻塞的生产者,直到把队列消费空,就阻塞不能再消费。wait/notify机制wait/notify机制原理wait/notify机制是与Monitor监视器锁关联在一起的。一个线程在持有某个对象的监视器...

2020-03-01 01:00:43 3022 1

原创 开发工具——git的几则常见问题

虽然平时git用的挺多的,但是因为大多是个人本地项目,所以涉及不到太多冲突问题,常用到的命令基本只有git add / git commit / git push,此外就是分支、恢复历史版本。本文记录了一些对于常用命令的记录(最简单的git init/ git add / git remote add那些就不说了)。大部分问题来自:https://www.zhihu.com/search?...

2020-02-21 17:07:02 401

原创 JVM(2)—— 垃圾收集与内存分配

垃圾收集1. 如何判断对象为垃圾对象(1) 引用计数法:每个对象维护一个计数器,记录有多少个对象在引用他,如果引用数为0,判断他为一个无用对象,可以回收。优点:实现简单,效率高。缺点:无法解决对象间的循环引用问题。(2)GC Root可达性分析算法通过一系列被判定为GC Roots的对象(主要包括栈里引用的变量,静态变量引用的对象,常量池的常量引用的对象,本地方法栈中引用的对象)...

2020-02-19 01:07:57 132

原创 JVM(1)——运行时内存结构

读《深入Java虚拟机》的时候,第一章就是描述JVM在内存上的结构模型,特此记录整理。(图暂时借一下YSOcean的,稍后用自己画的替换)。4. JVM运行时内存结构(内存结构模型)java虚拟机规范定义的运行时数据区:最大的的一块是堆,属于线程公有的区域,用来存放对象实例。栈分为本地方法栈,以及虚拟机栈,是线程私有的,分别用于调用native方法和java方法。每次调用方法的时候,...

2020-02-19 01:03:42 103

原创 经典算法与数据结构(7)—— 一致性哈希算法

前言假设现在有一个分布式系统,比如创建一个Tomcat集群部署一个web项目,采用Nginx服务器进行负载均衡。我们知道,nginx常见的负载均衡策略有:轮询(一个一个来)权重(访问比率参照分配给各个服务器的权重)URL hash(server_id = hash(request_url)%server_num),对请求的URL进行哈希,再对服务器个数进行取模,得到相应的服务器序号。...

2020-01-31 01:11:04 220

原创 Redis学习笔记(Redis深度历险 ——钱品文)

为什么要用Redis?因为传统的关系型数据库比如MySQL已经不能适用于所有的场景了。在传统的关系型数据库里,数据存放在磁盘上,IO开销很大。在高并发的情景下,比如秒杀系统里的库存扣减、对访问流量高峰的应对等,很容易把数据库打崩,所以需要引入缓存中间件。目前比较主流的缓存中间件有Redis和Memcached,综合考虑他们的优缺点,最后选择了Redis。(1)提高对热点数据的访问性能(2)在...

2020-01-09 19:50:31 434

原创 经典算法与数据结构(6)—— 二叉树的常规遍历(递归+非递归+层次遍历)

今天记录的是非常基础的二叉树的遍历,包括递归、非递归、层次遍历三个版本。最简单的当然就是递归版本的遍历啦,非递归版本还是要稍稍动点脑筋的。递归遍历递归版本的没啥好说的,对当前结点的打印有三个位置可以放,分别对应了前序、中序、后序遍历。简单易理解,但就是效率比较低。public class TraverseRecursion { public static void traver...

2019-12-12 20:07:58 145

原创 经典算法与数据结构(5)—— 二叉树的Moris遍历 (空间复杂度O(1))

二叉树的遍历(无论是递归还是非递归),都会用到栈结构,其中递归版本用的是系统栈,非递归版本用的是Java自带的Stack结构,空间复杂度均为递归栈的深度,即O(h),h为二叉树的高度。此外,层次遍历的空间复杂度是O(w),w为二叉树的宽度。Moris遍历的神奇之处在于,他的空间复杂度只有O(1),核心思想是利用叶子结点的空指针,下面介绍主要流程和代码实现。Moris遍历的流程Moris遍...

2019-12-11 21:01:30 499

原创 Mysql基本语法(Mysql必知必会阅读笔记)

这两天系统的复习了一下mysql语法和基本知识,本文为阅读mysql必知必会的笔记,作为学习过程的记录,属于比较零散随意的笔记。1. 查询语句select col_name from table;Select a, b from table where a in (1,2) order by b desc limit 1;select a, b from table where b b...

2019-12-10 20:00:12 234

原创 经典算法与数据结构(4)—— 图的遍历与常见算法实现(最小路径+最小生成树+拓扑排序)

前言上一篇博客里讲了图结构的代码实现,本篇就记录一下,如何利用上一篇介绍的图结构,进行图的遍历(BFS + DFS)以及实现图相关的常见算法,包括Prim算法、Kruskal算法、Dijkstra算法以及拓扑排序。关于图的这些算法,一直以来只是停留在了解算法思想的程度,还没有动手实现过。全部实现一遍过后,会发现代码量并不大,思想也都比较朴素,没有特别精巧难理解的那种。即便如此,亲手写一遍也还是...

2019-12-06 19:01:37 266

原创 经典算法与数据结构(3)—— 图的实现与反序列化

前言根据很多教材上的介绍,图结构的表示一般来说有两种——邻接矩阵法与邻接表法。事实上呢,除了这两种,还有另一种矩阵表示的方法[[weight, from, to], [weight, from, to],…]。那么不管是哪种表示方法,都是一种保存图的方式。如果我们想要反序列化图,把图加载到内存中,要怎么做呢?不管是哪种方式的保存方式,第一步都得先定义图结构,再具体确定如何进行反序列化。图的定义...

2019-12-05 16:44:56 552

原创 经典算法与数据结构(2)—— 三大排序算法(快排+堆+归并)

今天来手写一下三大经典排序算法吧,这个是非常基础的算法了。虽说基础吧,但是如果长时间不写,一下子未必能很熟练的写出来~ 把这三个放在一起是因为他们的时间复杂度都是O(NlogN),是效率比较高的排序算法。(随机)快速排序首先是快排,左神讲快排给我留下的印象挺深的,感觉比较好记。大意就是,在数组的左边划分一个less区(默认-1),右边划分一个more区(初始状态是包含最后一个元素)。首...

2019-12-04 15:30:30 243

原创 Java设计模式(3) —— 三种工厂模式

这两天看了大名鼎鼎的工厂模式~ headfirst的这一章挺长的,pizza的例子感觉也不是特别清楚,在网上搜了搜别人的博客又看了看,在此记录一下学习感悟吧为什么需要工厂模式?在Java中,创建对象的方式有多种,包括:用new关键词创建,最简单常用的就是这个了通过反射机制,classA.newInstance()Clone()方法复制构造器类进行对象的创建:Constructor...

2019-11-12 19:36:43 112

原创 Java设计模式 (2)——观察者模式

最近在读《HeadFirst设计模式》,这本书口碑不错,通俗易懂读着不累,应该比GoF的那本友好一些。本篇博客(以后关于设计模式的博客也同样)是阅读此书时整理的笔记,感谢这本书的作者~什么是观察者模式?观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,所有依赖者都会收到通知并自动更新。在观察者模式中,有一个主题对象,和多个观察者。主题对象一旦发生改变,就会通知所有观察者进行更新...

2019-11-05 20:55:07 163

原创 经典算法与数据结构(1)— KMP算法

经典算法的第一篇,记录一下KMP算法好了,因为比较经典巧妙而且我考研的时候忘看了没做出来????????????。KMP算法是三个人一起发明的,三个人的名字首字母分别是K、M、P,所以叫KMP~问题定义给定一个字符串S, 以及另一个字符串P, 判断P是否为S的子串,输出true or false。暴力解法暴力解法比较容易想到,就是遍历S,如果找到和P的首字母相匹配的元素,就继续逐个比对,发生失配时就继续...

2019-10-30 13:52:56 154

原创 Java集合(2)—— HashMap源码分析(jdk1.8)

JDK1.8中的HashMap与旧版本相比,最大的区别是,他的底层结构由原先的数组+链表变为数组+红黑树。不难理解,当冲突发生的比较频繁时,用链表解决冲突的一大问题是查询时遍历链表时间开销较大,因此改为红黑树,提高效率。HashMap字段...

2019-10-27 23:13:30 97

原创 Java设计模式 (1)——单例模式的五种写法

引言为了更好的理解Spring框架里的IOC、AOP,最好先学习一些常见的设计模式(因为Spring源码里面设计模式满天飞),第一个就是大名鼎鼎的单例模式啦。单例模式概念单例模式简单来说就是一个类只有一个实例,单例模式遵循的原则如下:整个类只能有一个实例,因此无法通过new()任意创建对象,构造函数为private。整个类维护的唯一实例在类的内部,且用static修饰。(若非stat...

2019-10-10 21:59:43 124

原创 Java集合(1)—— ArrayList源码分析(jdk1.8)

概论集合类是java.util下面的类,挑了几个常用的重点学习,大体体系结构如下(思维导图是用随便下载的Mindjet做的):注意: 这个图里的关系并不是严格按照jdk1.8源码画的,比如在源码里其实LinkedHashSet类是HashSet类的子类,但在图中二者属于并列关系。这张图只是为了给各种集合类进行逻辑关系上的整理。ArrayList继承的类:AbstractList(在此类...

2019-08-04 23:47:27 130

原创 旧版本(0.3.1)pytorch的安装

问题:pytorch官网被墙了,只能下载最新的0.4.1翻墙查看previous version, 没有windows版本的安装方式。解决方法:https://github.com/peterjc123/pytorch-scripts

2018-11-25 21:04:27 6848 1

原创 mac使用jupyter notebook报错,打不开浏览器

之前在win10上用ipython notebook一切正常,今天在mac上装了一下,报错:execution error: ““http://localhost:8888/tree?token=dcc43c88ed1dafe8650a3ebb6f8b1222afea4d38a0fee9a7””不理解“open location”信息。 (-1708)解决方法命令行输入:jupyter n...

2018-11-21 22:12:22 2482

原创 word2vec学习笔记(Skip-gram/CBOW + Hierarchy Huffman Tree/Negative sampling)

前言    word2vec是谷歌在2013年推出的一个开源的word embedding工具, 背后的模型包括CBoW ( Continuous Bag of Words )模型(输入context words, 输出center word)和Skip-gram (输入center word, 输出context words)模型。其实两个模型输出的都是softmax向量, 维度与词向量维度相...

2018-11-21 21:35:51 1416

原创 kaggle 影评情感分析(1)—— TF-IDF+Logistic回归/朴素贝叶斯/SGD

前言kaggle的这个starting competition (Bag of words meet bags of popcorns) 其实是一个word2vec-tutorial, 但是本篇文章没有用到 word2vec, 只用了 TF-IDF 的方式将句子向量化,再分别用logistic regression、multinomial Naive Bayes、 SGDClassifier 进...

2018-11-08 13:14:34 4350

原创 爬虫——用Scrapy爬取清华某学院的教授信息

Scrapy爬取清华教授信息第一个爬虫任务——爬取清华教授的信息。由于清华每个院的网站结构不一样,所以从其中一个院入手——我选择的是土木水利院,进行爬取,需要爬取的信息是教授的名字、教育背景、研究领域、学术成果(若干篇论文)以及百度学术中这些论文的摘要。工具使用scrapy框架,解析页面过程中使用xpath进行元素定位。过程新建scrapy项目: 在打算存储该项目的目录下打开命令行...

2018-09-17 21:08:09 1088 3

原创 win10安装scrapy报错Microsoft Visual C++ 14.0 is required

win10安装scrapy报错Microsoft Visual C++ 14.0 is required问题使用pip安装scrapy:在命令行中输入pip install scrapy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com安装到twisted的时候报错Microsoft Visual C++ 1...

2018-09-13 20:05:34 690

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除