- 博客(76)
- 资源 (7)
- 收藏
- 关注
原创 tushare使用教程(附代码)
tushare安装Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,数据多样易获取,在数据分析,机器学习,股票预测等领域都可以被广泛的应用。从tushare获取到的数据为dataframe格式,无需重新对数据进行清洗,可以直接将数据存储至csv或者数据库中。官网链接如下:https://tushare.pro/。其包括股票,基金,期权,债券,期货等多种数据。数据种类如下:https://tushare.pro/documen..
2020-12-29 20:06:54 7832 2
原创 java笔试--动态规划+回溯/dfs
相关题目:140. 单词拆分 II1、单词拆分二class Solution { public List<String> wordBreak(String s, List<String> wordDict) { HashSet<String> wordSet = new HashSet<>(wordDict); if(s==null||s.length()==0){ retur.
2020-11-01 15:44:02 230
原创 java笔试--数据结构模拟
相关题目:381. O(1) 时间插入、删除和获取随机元素 - 允许重复1、O(1)时间插入,删除,获取随机元素--允许重复实现思路:因为插入与删除需要O(1),则需要HashMap或者HashSet来进行实现。否则复杂度为O(N)。但是若要在有重复元素的情况下,查询的时候也需要O(1),只能为数组等顺序结构(若不包含重复元素,则直接可以用HashMap来进行实现)。所以说需要HashMap与ArrayList。但是,在删除的时候数组对某一个元素的删除为O(N),所以得需要记录每一个元素在Li.
2020-10-31 16:49:55 247
原创 java笔试--概率生成问题
相关题目:有一枚不均匀的硬币,要求产生均匀的概率分布 有一枚均匀的硬币,要求产生不均匀的概率分布 用 Rand7() 实现 Rand10() 在圆内随机生成点 解题思路:由于是概率问题,而每次只能以某种概率的形式出现一种结果,所以我们可以通过N进制,来得到相应的概率。在相应的N进制中,根据一共可能出现的结果和需要产生的概率,来实现相应的条件。1、不均匀硬币产生等概率分布现有一枚不均匀的硬币 coin(),能够返回 0、1 两个值,其概率分别为 0.6、0.4。要求使用这..
2020-10-31 14:41:48 323
原创 java笔试--数组的dfs问题
在针对于二维数组的dfs问题时,优势也可以采用并查集的方法来进行。相关题目:463. 岛屿的周长733. 图像渲染695. 岛屿的最大面积1034. 边框着色数组DFS的思路:网格问题是这样一类搜索问题:有 m×n 个小方格,组成一个网格,每个小方格与其上下左右四个方格认为是相邻的,要在这样的网格上进行某种搜索。这种题目乍一看可能有点麻烦,实际上非常简单,尤其是用 DFS 的方法。题目没有限制的话,我们尽量用 DFS 来写代码。下面我们一步步地构造出方格类 DFS 的代码。.
2020-10-30 15:57:51 402
原创 java笔试--视频拼接
相关题目:1024. 视频拼接1、视频拼接class Solution { public int videoStitching(int[][] clips, int T) { /** 动态规划 int[] arr=new int[T+1]; Arrays.fill(arr,Integer.MAX_VALUE>>1); arr[0]=0; for( int i=1;i<=.
2020-10-24 15:01:01 140
原创 java基础--static关键字
JVM类加载机制:我们知道,JVM类的加载(在实例化之前,是加载阶段,指将类加载到JVM数据区中,会执<client>()方法;实例化则执行的是成员的实例化方法<init>())分为五个步骤。1、加载:该阶段是类加载过程中的一个阶段。在此阶段中,会生成一个java.lang.Class对象,作为方法区各个数据的入口。注意这里不一定非得要从一个Class文件获取,这里既 可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理), 也可以由.
2020-10-23 21:34:37 257
原创 java笔试-字符串双指针
相关题目:925. 长按键入1、长键按入思路:声明两个指针,分别为左指针与右指针,每次判断当两个字符串相等的时候,left与right同时相加,否则判断右字符串是否为重复的字符串。class Solution { public boolean isLongPressedName(String name, String typed) { if(typed.length()<name.length()){ return fa...
2020-10-21 11:32:23 127
原创 java面试--操作系统面试
1、进程和线程以及它们的区别进程是对应用程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发 线程是进程的子任务,是CPU调度和分派的基本单位,实现了程序内部的并发,保证了程序的实时性。 一个程序至少有一个进程,一个进程至少有一个线程,县城娱乐来与进程而存在 进程在执行过程中有独立的内存单元,而多个线程共享进程的内存2、进程间的通信的几种方式 管道(pipe):管道可以分为三种。 1、普通管道:单工,只能单向传输。可用于具有亲缘关系的父子进程间或兄弟进程的通信,2.
2020-10-19 11:30:55 485 1
转载 Java面试--计算机网络面试(二)
计算机网络常见面试题浏览器输入网址之后发生了什么 DNS域名解析 HTTP协议生成请求报文 TCP协议将请求报文分割成报文段,进行可靠传输 IP协议进行分组转发 TCP协议重组请求报文 HTTP协议对请求进行处理 网络体系(OSI七层、TCP/IP四层、五层)TCP/IP协议各层的作用 应用层:应用层的任务是通过应用进程之间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。这里的进程是指主机中正在与运行的
2020-10-16 15:51:51 245 1
原创 java笔试--位运算
相关题目:342. 4的幂4的幂思路:4的幂是诸如01,100,10000,1000000的2进制。满足4的幂既要满足2的偶次方幂。所以游戏如下特点:n&(n-1):判断n是否为2的幂(即1,10,100,1000...等形式) num&0xaaaaaaaa(1010101010101010):判断n是否满足是2的奇次方幂所以判断是否为4的幂(2的偶次方幂):n>0&&(n&(n-1))==0&&(n&0xaaa.
2020-10-16 14:15:57 99
原创 java笔试--动态规划
相关题目:面试题 17.26. 稀疏相似度稀疏相似度:通过暴力循环时求解发现,复杂度达到了O(N^3),运行超时。所以可以在此基础上求出每一个元素出现的所有文件的编号(也就是数组的行号)。在同时可以记录出任意两个文件的公共元素的数量(通过稀疏矩阵的方式活着hashMap的方式)class Solution { public List<String> computeSimilarities(int[][] docs) { //采用包理的方法会出现运行.
2020-10-15 11:22:04 125
原创 java笔试--一维数组
相关题目:LCP 11. 期望个数统计针对于一维数组的去重,主要有两种方式;1、时间复杂度O(n*logN) ,空间复杂度O(1)先对数组排序,接着对记录数组的前一个元素的值,来进行比较处理class Solution { public int expectNumber(int[] scores) { //详情见推导过程,实际上为数组的去重 Arrays.sort(scores); int index=-1; //选取一个数组中不
2020-10-14 12:14:30 159
原创 java笔试--并查集
同类题目:947. 移除最多的同行或同列石头移除最多的同行或者同列的石头并查集特点:用一个一位数组来保存每个元素的根节点,不断合并元素(通过合并根节点),来统计元素的连通情况。点击查看更多思路:由于在本题中为删除的同行或者同列的石头,所以将行和列来进行合并(判断相邻结点的时候,多用于点与点之间的合并)。所以声明一个一维的数组用以保存每个行或者列的根节点。在本题中,列的结点对应的为10000+stones[i][1]是由于区分行和列,不能使行或者列重复,否则会无法区分导致无法合并。所以待.
2020-10-14 11:18:32 148
原创 java笔试--链表快慢指针
同类题目:876. 链表的中间结点链表的中间节点声明两个指针,分别为快指针和慢指针。当快指针到达链尾的时候,有两种情况,分别为fast指向最后一个元素(链表为偶数),此时中间元素为slow.next;当fast指向的是倒数第二个元素的时候(链表为奇数),也为slow.next.所以判断是否为最后一次遍历应该为fast.next!=null&&fast.next.next!=null(只有当至少剩余两个元素时,才遍历),而返回的始终是slow.next/** * Defin
2020-10-13 21:35:18 183
原创 java笔试--树的广度遍历(BFS)
在树的广度遍历的时候,通常使用对列或者站来实现,大致思路为:先存储一行的数据,再记录每层的个数并不断地把下一层的数据存储到队列/栈中相关题目:103. 二叉树的锯齿形层次遍历二叉树的锯齿层次遍历主要有两种思路1、通过一个对列或者两个栈来实现,奇数层的时候,向对列的末尾先添加左孩子,再添加右孩子;当偶数层的时候,向队列的头先添加右孩子再添加左孩子/** * Definition for a binary tree node. * public class TreeNode {.
2020-10-13 21:01:44 131
原创 java笔试--十进制数字二进制的个数(比较器)
Integer二进制函数:public static int bitCount(int i):数字i的二进制中1的个数 public static String toBinaryString(int i):将十进制i转化为二进制 public static String toOctalString(int i):将十进制i转化为八进制 public static String toHexString(int i):将十进制i转化为十六进制题目:1356. 根据数字二进制下 1 的数目排序.
2020-10-13 17:19:46 365
原创 java笔试--贪心算法
1029.两地调度在此题中,采取的是贪心算法的思想。由于有2N个人服务两地,故先假设所有的人都前去了B地,接着有N个人从B地去了A地,没人所花费的费用为pre[A]-pre[B].所以,选取最小的前N个pre[A]-pre[B].。进行计算(差值排序)class Solution { public int twoCitySchedCost(int[][] costs) { int[] arr=new int[costs.length]; int res=0
2020-10-13 14:43:39 121
原创 java笔试--子数组问题
相关题目:560. 和为K的子数组1248. 统计「优美子数组」974. 和可被 K 整除的子数组1371. 每个元音包含偶数次的最长子字符串通常,涉及连续子数组问题的时候,我们使用前缀和来解决。所谓前缀和,就是创建一个新的数组,用以保存子数组的和来实现求和O(1)的复杂度,在使用前缀数组的时候,应注意数组的初始话条件。前缀和只适用于解决连续子数组问题,在题目中通常会有一个定值问题或者一个等式条件在使用前缀和的时候,前缀和pre[i]表示从第一个元素到第i个元素的和。即sum(..
2020-10-11 20:19:47 156
原创 java面试--计算机网络面试(一)
计算机网络体系结构计算机网络五层体系结构1、应用层应用层的任务是通过应用进程之间的交互来完成特定网络应用。应用层协议定义的是应用进程之间的通信与交互规则。对于不同的网络应用需要不同的用用层协议。比如DNS(域名系统),HTTP协议,支持电子邮件的SMTP协议等等。应用层交互的数据单元为报文。域名系统:作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网不必记住IP地址。 HTTP协议(超文本传输协议):所有的www文件都得遵循HTTP协议,涉及HTTP是为..
2020-10-10 17:26:42 2275
原创 java面试--java序列化及克隆
1、java序列化序列化介绍:序列化:将java对象写入字节流;反序列化:从字节流中恢复对象意义:序列化机制允许将实现序列化的java对象装换位字节序列,这些字节序列可以保存在磁盘,数据库上,或者通过网络传输以达到以后恢复成原来的java对象。序列化机制可以使对象脱离程序的运行而独立存在(脱离JVM的生命周期)使用场景:永久性保存对象。保存对象的字节序列到本地文件的或者数据库中。 通过序列化,以字节流的形式使对象在网络中记性传递与接收。建议创建的每一个javaBean类都实现Seria
2020-10-09 15:48:51 213
转载 java面试--进程调度算法
一、先来先服务和短作业(进程)优先调度算法1.先来先服务调度算法先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。2.短作业(进程)
2020-09-30 17:29:26 415
原创 java面试--ThreadLocal线程变量
概述:threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据,对其他线程而言是隔离的(在每个线程的set()方法之后,只能get到本线程的变量的副本,对其余的线程是不可见的)Thread为每一个变量在线程中都创建了副本,每一个线程都可以访问自己的内部变量副本,就ThreadLocal本身而言,他是不存储值的,存储在ThreadLocalMap中实际上,ThreadLocal的静态内部类ThreadLocalMap为每个Thread都维护了
2020-09-30 16:38:09 225
原创 java面试--reentrantLock可重入锁
可重入锁(可以对同一个锁进行重复加锁)。ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似。ReentrantLock 内部是基于 AbstractQueuedSynchronizer(以下简称AQS)实现的。ReentrantLock 在功能上比 synchronized 更为丰富。比如 ReentrantLock 在加锁期间,可响应中断,可设置超时等。于2020/09/09完成参考链接:https://www.imooc.com/art.
2020-09-28 22:53:24 400
原创 java面试--synchronized
概述:在java多线程中,可以使用synchronized来使代码同步。同步的方式就是隐式的加锁,其加锁过程是由jvm帮助我们完成的,每次获取和释放锁操作都会带来用户态和内核态的切换,从而增加系统性能开销。若在反编译中有不可消除的synchronized的时候,class文件中会含有连个特殊的指令monitorenter和monitorexit,这两个指令就是进入管程与退出管程。synchronized可以在三种地方来进行修饰:普通方法:加锁的对象是当前实例,即this ,对该类其他实例对象..
2020-09-28 22:45:05 160
原创 java面试--AQS原理及AQS同步组件
AQS 原理概览AQS的核心思想为:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是使用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。它只是定义了一套多线程访问共享资源的框架CLH队列是一个虚拟的双向队列(不存在队列的实例,只存在节点之间的关联关系)。AQS是将每条请求共享资源的线程封装成一个CLH队列的一个节点来实现锁得分配AQ.
2020-09-28 17:13:33 373
原创 java面试--阻塞队列
概述:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e)
2020-09-28 15:16:18 228
转载 java面试--java‘锁‘
锁分类:1、悲观锁与乐观锁在数据的并发操作下,悲观所认为,自己在使用数据的时候一定会有别的线程来进行修改数据,当前线程将自己的修改成功写入;若数据被更新,因此会先加锁。确保数据不会被别的线程修改。java中,synchronized与Lock的实现类都是悲观锁,适合写操作多的场景;乐观锁认为自己在使用数据的时候,不会有别的线程修改数据,所以不会加锁。只是在更新数据之前判断之前有没有别的线程更新了这个数据,若这个数据没有被更新,当前线程将自己修改的数据成功写入;若数据为其他的线程修改,则根据...
2020-09-27 17:43:21 160
原创 java面试--线程各个关键字比较
1、sleep 与 wait 区别sleep()方法是属于Thread类中,wait()属于Object类中,需要使用notyfy()[随机唤醒一个线程]或者notifyAll()来唤醒 sleep()方法会将该线程让出cpu给其他的线程,让其它同优先等级的线程有机会使用。但是其监控状态依然保持,不会释放对象锁,阻断其他线程对该对象的调用。当到达指定的时间后,进入到就绪队列(线程阻塞),不能保证立马执行 调用wait()的时候,线程会释放对象锁,进入等待此对象的等待队列中(线程挂起),只有通过调..
2020-09-26 12:20:53 122
原创 java面试--多线程的创建
多线程实现的四种方式:1. 继承thread类,实现多线程Thread类在本质上实现了Runnable接口的实例(实现了Runnable接口),代表着一个线程的创建。启动线程的唯一方法是通过Thread类的start()实例方法,start()是一个native方法,他将启动一个新线程并执行run()方法。Thread类的start()方法:public synchronized void start() { //若不为就绪状态,则抛出异常,一个thread只能执行一次star.
2020-09-26 09:16:39 175
转载 java面试--JMM(内存模型)
在java中,采用的是共享内存模型。JMM描述的是一组规范,它定义了程序中各个变量(对象实例,静态变量,数组对象元素)的访问方式。它决定了它决定了一个线程对共享便来那个的写入如何对另一个线程可见。它试图屏蔽各种硬件和内存系统的内存访问的差异,使java在各种状态下都可以达到内存一致性。jmm概述:处理器上的寄存器的读写速度比内存快多个数量级,未解决这种冲突,所以在每一线程中加了高速缓存(本地内存)。而JMM定义了java的线程与内存的关系:线程的共享变量是存储在主内存中,每一个线程都有一个私有的工作
2020-09-25 14:41:43 409
原创 Hashtable源码分析(1.8)
相比于hashMap,HashTable有以下特点:1、和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable 的实例有同样有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量就是哈希表创建时的容量。在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索;加载因子是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量和加载因子这两个参数只是对该实现的提示,通常,默认加载因子是 0.75.
2020-05-18 11:17:36 247
原创 HashMap源码分析(jdk1.8)
HashMap是基于哈希表(散列表),实现Map接口的双列集合。其数据结构是“链表散列”,也就是数组+链表 ,key是唯一的,但是value可以重复。允许存储null 键null 值,元素无序HashMap数据结构数据变量HashMap本质上是一个Node数组,Node是数组的基本组成单元,每一个Node都包含了一个key-value键值对。transient Node<K,V>[] table; //存储元素数据的节点int threshold; //当数组的大小大于th
2020-05-17 21:38:17 184
转载 java之LinkedList源码分析(jdk1.8)
jdk1.8的LinkedList是一个双向链表LinkedList类的结构:LinkedList的源码结构如下:public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable由此可见,LInkedList继承了AbstractSequentialL...
2020-05-12 11:44:46 175
原创 JAVA内存模型基础解释
并发编程在并发编程领域,有两个关键问题:线程之间的通信和同步。线程之间的通信线程通信的目的是为了能够让线程之间相互发送信号。另外,线程通信还能够使得线程等待其它线程的信号,比如,线程B可以等待线程A的信号,这个信号可以是线程A已经处理完成的信号。线程之间的通信有两种机制,为通过共享变量通信与消息传递在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。 在消息传递的并发模型里,线程之间没有公共状
2020-05-09 18:22:28 177
原创 java字符串运行原理(StringTable)
例题:public static void main(String args[]) { String s1="a"; String s2="b"; String s3="a"+"b"; String s4=s1+s2; String s5="ab"; String s6=s4.intern(); //问 System.out.println(s3==s4...
2020-05-05 23:57:20 770
原创 JVM内存结构解释
java代码运行过程:首先,java源代码文件(.java)会被java编译器(javac.exe,反编译为javap.exe)编译为二进制字节码文件(.class,相当于jvm的系列指令),接着jvm中的类加载器加载各个类的字节码文件。加载完毕后,交由java执行引擎运行,JVM指令经过解释器,转化成机器码,最后再交给CPU运行JVM的好处:一次编写,多次运行。跨平台,屏蔽了不同的操...
2020-05-04 17:00:16 168
原创 JAVA垃圾回收算法及原理
如何判断垃圾是否可以回收?1、引用计数法(早期的Python)只要该对象被其他的对象所引用,对象就计数加一,若被引用两次,就计数加二,当引用该对象的变量不在引用该对象的时候,计数减一。当计数为零的时候,代表没有变量对该对象进行引用,最后就会作为垃圾回收。弊端:当发生循环引用的时候,当A,B都不再使用的时候,计数仍为一,不会被垃圾回收。如图:2、可达性分析算法(java)...
2020-04-29 22:29:06 495
scrapy图片异步分类下载
2020-03-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人