- 博客(59)
- 资源 (1)
- 问答 (3)
- 收藏
- 关注
原创 Java 交替打印两个线程的三儿种方法
1 锁 + wait + notifypublic class PrintTwoThreads { private static int i = 0; private static final Integer mtx = 0; private static final int MAX_PRINT_NUMBER = 9; public static void main(String[] args) { new Thread(() -> {
2021-09-19 02:42:02
1290
原创 Top K 问题一网打尽
Top K 问题Top K 问题,指的是在一个无序数组中,找前 K 大的元素或者第 K 大的元素,这两个问题其实是一个问题,有着共同的解法.本文将针对【找出第K大元素】这个问题给出 4 中不同的解法。解决方案1 遍历 + 插入排序,O(nk)我们可以想到最暴力简单的方式就是把 K 个最大的元素保存在一个有序数组中,每次从原数组遍历拿一个元素,用插入排序的方式去更新这个有序数组,最后,这个数组就是 Top K 的元素。import java.lang.reflect.Array;impo
2021-04-01 15:33:36
353
原创 RPC 原理,Demo 演示,为什么 RPC 用动态代理
RPC 出现背景现在很少有单机系统,复杂的系统有很多不同的服务组成,不同的服务部署在不同的机器上,包括数据库也是分布式存储的。不可避免地,会出现一个服务器调用另一个服务器的方法的场景。比如,服务器A想查询用户数据库,而提供数据查询的服务在服务器B上,如果A想使用B,就需要把查询请求发给B,B执行查询方法,再返回给A,这其实就是一次远程方法调用过程(Remote Procedure Call,RPC)。这里有个问题,为什么服务器A查询B的数据,不是一次 http 请求就可以解决了吗?就像 web 浏览器
2021-03-22 13:55:07
1812
2
原创 Java 动态代理,invoke() 自动调用原理,invoke() 参数
Java 动态代理学习动态代理,先从静态代理入手静态代理假如现在我们面临一个需求,把一个项目中所有访问数据库的方法都记录日志。最直接的方法是修改所有代码,在每个方法里面都加入写日志代码:public class Dao { User findUserbyId(int id) { // 业务代码 xxx; // 加入写日志代码 xxx; } }但是这样工作量会很大,并且模块之间是耦合的,比如下次的需求是修改记录日志的内容,那么又要去修改所有业务代码,显然这种方法是不可取的。
2021-03-17 00:51:37
6470
22
原创 Java线程中断 阻塞 InterruptedException
Java线程中断 阻塞 InterruptedException线程切换:线程处于可运行的状态,只是还没有获取CPU时间片,如yield方法线程阻塞:线程请求资源等不满足,进入阻塞状态,无法运行线程中断:操作系统中断是保存现场,进行中断处理。而Java线程中断仅仅是一个状态,中断标志位设置为true,线程完全可以不理睬继续执行,也可以响应这个中断或者抛出异常,取决于线程的动作,中断仅仅是一个通知,提供了一种线程控制机制线程中断一般的,中断只是一个通知,当调用线程的interrupt方法的时候,
2020-08-01 14:20:38
713
原创 分层双向链表+ 哈希表 实现LFU
为了实现LFU,对于每个页面,不仅需要记录访问时间的次序(用双向链表),还要记录访问频率(用HashMap,key是频率,value是这个频率下所有页面组成的双向链表),同时还有随机读写(用哈希表存储组织每个页面),所有一共有两个哈希表。下图(来源leetcode题解https://leetcode-cn.com/problems/lfu-cache/solution/lfuhuan-cun-by-leetcode-solution/)解释了链表和哈希表组织方式:class LFUCache {
2020-07-14 15:36:17
518
原创 java HashMap + 双向链表实现 LRU
LRU 是最近最少使用置换算法,当页面的缓存满时,需要把最久未使用的页面从缓存中清理出去,要求 插入 和 访问都要O(1)的事件复杂度,因为需要用哈希表来储存每一个页面便于随机访问,用双向链表来组织这些页面,可以随机插入删除某一个页面。class LRUCache { DoubleList list = new DoubleList(); int cursize = 0; int size; Map<Integer,Node> map ; public
2020-07-14 15:12:41
546
原创 java 类型自动提升和强转,不注意就要拉裤里!
java类型提升机制比较常见,但是比较隐蔽,特别是自动强转类型的时候,如果不注意就可能出错。涉及基本元素的自动提升类型场景有:不同类型进行四则运算的时候,会自动提升类型到类型最高元素的类型+= 和 -= 会自动提升类型,然后再强转回来位运算符比int类型低的会自动提升成int类型<<= 和>>= 会转成int类型再强转回来三元操作符 ? : 会像四则运算一样自动提升类型,但是不会把强转回来涉及到方法重载时的类型提升在方法重载的时候,如果参数类型不严格匹配,
2020-06-23 10:27:21
356
原创 四种背包问题总结
四种背包问题总结1、01背包问题描述:有n种物品,每种物品有价值v和重量w,给定一个容量为c的背包,每种物品只能选一个,求背包能装物品的最大价值。解法:用dp(i)©来表示当前背包剩余容量为c时,前i个物品的最大价值。之所以用这两个状态,是因为背包不同容量时候,选择也不一样。状态转移情况是选择或者不选择第i个物品,状态方程为:(注意这个选择或者不选择第i个物品,它表示组合数,与顺序无关...
2020-05-06 11:52:19
692
原创 java实现哈夫曼编码API,拿来即用
package homework;import java.io.*;import java.util.*;import java.util.logging.Handler;public class Hafuma { private static Node root; /** * 输入字符串,返回字符串的压缩码,输入不能为空 * @param s ...
2020-04-09 23:50:30
338
原创 java用工厂类模拟spring-IoC实现
目录核心思想创建maven工程,配置pom创建表现层,服务层,持久层的模拟实现类持久层接口和实现类服务层接口和实现类表现层实现类用配置文件加载类创建工厂来实现类容器,并且创建类加入容器核心思想当一个类创建另一个类的时候,就产生了依赖关系,我们可以用工厂来创建类,当需要用这个类的时候,可以直接从工厂获取,这样就消除了类和类之间的依赖关系,即使控制反转IoC。创建maven工程,配置pom&l...
2020-03-30 11:30:00
370
原创 java反射和反编译
目录反射机制与什么用反射机制相关的类获取类的字节码三种方式1 通过Class类的静态方法获取字节码2 通过类的getClass()方法获取3 通过class属性获取通过反射创建对象获取反射类中的各种属性方法1 获取属性的名字2 获取属性的类型3 获取属性的修饰符4 获取类中的方法和方法的参数通过反射反编译出类获取类路径的方法通过反射调用方法反射的作用1 可以直接从配置文件中读取类名,进而实例化对象...
2020-03-25 11:37:01
697
原创 七种排序java实现
package homework;import static java.lang.System.gc;public class Sort { private static int[] a ={1,2,3,4,0,-1,11,23,1,-9,1,2,3,4,5,6,7,8,9,99,88,77,665,55,44,33,22,11,23,24,25,-1,-22,-34,-54,-7...
2020-03-23 14:37:07
238
原创 python课程小作业之桌面小工具系统
from tkinter import *#图形界面包from tkinter import messageboximport os.pathimport osimport mathimport timeimport copyfile_list=os.listdir('c:\\') #返回c盘目录if 'windowstools' not in file_list:#若不...
2020-02-20 16:51:08
573
原创 leetcode题目2. 两数相加
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){int j...
2019-06-05 20:14:19
258
原创 python分析qq聊天记录汉字频率
import re# -*- coding: utf-8 -*-with open('C:\\Users\\BIMK\\Desktop\\1.txt','r+',encoding='UTF-8') as f:#读qq聊天记录的导出文件 a=f.read()a=re.sub('(\d{4}-\d{2}-\d{2}.{9})','',a)#删除日期信息a=re.sub('(\[.{2...
2019-04-04 16:57:59
820
原创 python Requests库爬取海量百度图片
import requestsimport reimport oskeyword='安徽大学' ##此处是要抓取的百度图片def get(n): url='http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&pn='+str(n*20)+'&gsm='+str(hex(n*20))+'&...
2019-03-30 09:53:03
757
原创 O(n)时间复杂度找到数组中任意一个重复元素
解决思路用计数排序的思想排序,直到发现重复的结束。关于计数排序请看:计数排序代码#include<stdio.h>/*检查数组中重复的元素,并输出,数组里面的整数大小不超过n-1,n是数组规模采用交换下标的方式,时间复杂度为n*/void exchange(int *a,int j,int i){ int ex; ex=a[i]; a[i]=a[...
2018-11-22 18:40:09
1169
1
原创 Adaboost集成学习方法用于二分类(基于感知机)
Adaboost原理开始时,算法为每个训练样本分配相同的权值,然后用弱分类器进行训练,把错分的样本对应得权值增加,对分的样本权值减小或者不变,再把权值归一化,并记录这个分类器的总错误率。如此迭代,最后将多个弱分类器进行有权值(错误率)的集成代码function adaboost()clc;clear all;Mc=20;%弱分类器的个数M = importdata('D:\毕业设计...
2018-11-19 23:54:21
1085
原创 随机森林原理及其用于分类问题的matlab实现
随机森林随机森林是多个决策树的集成学习,每个决策树用bagging的方法选数据集,并且在选择最佳属性划分的时候随机划分一些属性进行分类,比单个分类器效果更好,泛化能力更强。代码解释1.用结构体的嵌套实现树的结构。2.makerandomtree递归的创建树。3.可自动适应不同的类别标签,不同的属性个数和不同的类别个数。4.函数ent(D)返回D的信息熵。代 码树的主体:f...
2018-11-16 22:03:33
15154
11
原创 决策树matlab实现二分类或者多分类
代码解释maketree函数递归建立树tree=struct(‘isnode’,1,‘a’,0.0,‘mark’,0.0,‘child’,{}) 所有分支递归的存在child{}中函数gan(D)计算D的信息率代码可以自动适应不同的分类标签和类别个数代码function tree=maketree(D,a) tree=struct('isnode',1,'a',0.0,'mark',...
2018-11-16 17:41:50
10628
7
原创 BP神经网络实现分类问题(python)
一些代码解释python版本:3.6梯度更新下面的代码 是对输出层和隐层的梯度计算,具体可参考周志华机器学习103页梯度更新公式 for i in range(self.outputn):#计算输出层的梯度 y=self.o[i] g[i]=y*(1-y)*(n[i]-y) for i in ran...
2018-11-14 20:06:12
15088
19
原创 神经网络-感知机原理及其matlab代码实现二分类
感知机简介感知机是最简单的神经网络,结构如下图所示: 感知机由输入层和输出层组成,输入层可以有多个,输入的结果等于每个输入神经元和权值的乘积xw的和:y=x1w1+x2w2-θ其中θ可以固定为-1,因此感知机通过不断训练来优化权值感知机用于分类如图,分类的目的是找到一个直线(超平面)将两个类别分开,感知机通过不断训练寻找合适的直线来分类,但是只适用于线性可分问题。matlab代码...
2018-11-12 15:09:22
4013
1
原创 朴素贝叶斯原理(naive bayes)及其matlab代码
朴素贝叶斯原理贝叶斯决策以概率决策为基础。在假设错分代价相同的情况下,最小化错误率可以等价的看作最大化后验概率,即是 max P(c|x)=P(c )P(x|c)/P(x).朴素贝叶斯假设属性之间都是互相独立的,则判别准则可以看作:Hnb(x)=argmax P(c )*(P(x|c))P(**x|**c)=P(x1|c)P(x2|c)*P(x1|c)…P(xi...
2018-11-10 15:17:01
7117
6
原创 K-means聚类matlab实现
K-meanskmeans用贪心策略,能十分简单有效的聚类,但是k的选取会影响聚类效果。聚类效果初始数据集聚类之后,红色*是聚类中心代码function kmeans()clear all;clc;k=3;%k为聚类个数x = 0.8 + sqrt(0.01) * randn(100,2); %随机生成数据集y = 0.2 + sqrt(0.02) * randn(100...
2018-11-09 23:19:55
5731
2
原创 KNN分类算法原理及其Matlab实现
KNN算法原理K近邻算法是一种简单的监督学习算法。对于给定测试样本,直接计算该样本和训练集的距离,将距离最近的k个“邻居”点的类别作为参考,作为预测结果返回。测试数据测试数据来自林智仁的分类任务数据集,链接:(https://www.csie.ntu.edu.tw/~cjlin/)代码matlab版本:matlab R2017afunction KNN()clear all;...
2018-11-09 21:40:10
10535
17
原创 c语言冒泡排序
#include<stdio.h>int main(){ void bubble_sort(int *a,int n); int a[10]={10,5,8,6,4,1,2,3,6,0},i; bubble_sort(a,10); for(i=0;i<10;i++) printf("%d ",a[i]); return ...
2018-06-25 20:28:05
1018
原创 AOJ--字符串全排列
问题设计算法生成n个元素{r1,r2,…,rn}的全排列。n&lt;=10。按照字典序排列。思路可以将问题递归的看作两个部分: 1、依次将字符串的每一个按顺序一定到第一位,剩下的长度为(n-1)的字符串看作一个新的串 如:abcd 可以有: a bcd b acd c abd ...
2018-04-09 09:25:41
404
原创 AOJ--开关灯
问题吃完草莓以后,机房的小伙伴们要开始做些运动。在ACM实验室里有N盏灯编号为1到N,起初都是开着的,从第一盏灯开始,凡是编号是一的倍数的灯的开关都要被按一遍(亮的变成暗的,暗的变成亮的), 然后到第二盏灯,凡是编号是二的倍数的灯的开关都要被按一遍,一直到第N盏灯,凡是编号是N的倍数的灯都要被按一遍。那么问题来了,在灯质量比较好的情况下,最后还有多少盏灯是亮着的。输入题目包括多组输入...
2018-04-01 22:03:21
662
原创 ACM--AOJ计算GPA
问题上学期面对繁重的课程和考试,TYF终于考完了。成绩出来之后,TYF想看一下GPA(Grade Point Average,平均成绩点数)是多少,之后他熟练的打开了教务处,看到绩点显示0.00,他丝毫没有感到吃惊,他知道教务处又出现问题了。之后TYF决定自己写一个程序来计算自己的GPA。想必大家都知道GPA如何计算的,就是加权平均数。计算方式如下: 例如某学生的五门课程的学分和他所获得的绩...
2018-04-01 21:17:37
508
原创 ACM--减肥
问题描述由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥。 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_- 现在就请你帮帮他,算出...
2018-04-01 20:55:17
623
原创 ACM--西瓜理发
问题某天,西瓜决心皈依勺林寺,于是来到安大门口的理发店,准备剃一个光头。 然而理发店有很多人排队,西瓜想知道他大概还需要排队排多久。 假设一位男生需要8分钟,一位女生需要12分钟。程序输入说明测试数据包括多组 每组数据包含一个字符串s,0<|s|<=2000 字符串只包含字符’M’,’W’,’O’ M表示男生,W表示女生,O表示西瓜 在字符串中的位置越左表示...
2018-03-30 20:10:55
498
原创 2018安徽大学计算机机试3--最短的步数
问题描述输入两个整数n,m,( 0 < n,m<100000)每一次,第一个整数可以执行乘2,、减1、加1三种操 作的任意一种,求n到m至少要多少次这样的操作。解决思路每次可以进行三个操作的其中一个,问题可以转化成单源最短路径问题: 每次可以走三个方向,求最短出口。 用队列实现bfs,能比较完善的解决此类问题,但是由于队列需要储存出口之前的所以路径,空间冗余度较大...
2018-03-30 09:45:51
1764
原创 2018安徽大学计算机机试2--单调栈
问题描述问题定义一个单调栈:每次整数n入栈时,如果栈顶元素大于n,则栈顶元素出 栈,并且继续判断栈顶元素是否大于n,大于则出栈,重复操作,直到栈顶 元素不大于n,n入栈。入栈完毕。例如:栈中元素为2 3 7,如栈元素为6, 则7出栈,6入栈,最后结果为2 3 6;输入输出第一行输入一个整数0<n<100000,表示待入栈的元素序列第二行输入n个待入栈的...
2018-03-30 09:41:00
1578
1
原创 2018安徽大学计算机机试1--斐波那契数列
问题描述给定一个函数: F(0)=0; F(1)=1; F(n)=F(n-1)+F(n-2),n>1 程序输入一个整数n,0 < n<100000,输入F(n)的值,结果对854562545取余。解决思路可以用递归的方法进行迭代相加,但由于数据比较大,用递归调用函数栈会消耗大量时间,所以用循环迭代相加的方式代替递归。代码语言:c#inclu...
2018-03-30 09:36:19
1547
5
原创 python基础--实现大数到任意进制的转换
问题实现大数,远远超过python能表示的整数,比如有上百位整数,到2-16进制的转换.解决思路讲大数存在字符串,从大数的最高位开始,依次到最低位,每一位取出来转换成整数,对进制x进行整除和取余,将商保存在字符串中,将余数*10加上大数的下一位作为新的被除数,以此类推,直到大数取完为止。得到了整个大数一次的商和余数,再用迭代相除法,直到商为0停止,记录每次的余数,即可算出转换之后的...
2018-03-19 10:52:13
2193
4
原创 python十分简单实现十进制到任意进制的转换
目的输出一个十进制的数和需要转换的进制,可以实现转换进制。进制的范围是2-16方法方法非常简单,就是利用辗转相除发, 保存商和余数,知道商为0为止,再将余数反转。 用列表a=[0,1,2,3,4,5,6,7,8,9,’A’,’b’,’C’,’D’,’E’,’F’]储存转换之后的每一位,直接用余数作为指针即可找到对应的符号。代码(python3.5)def f(n,...
2018-03-19 00:12:02
30133
3
原创 数据结构--停车管理系统
停车管理系统问题描述停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开...
2018-03-18 23:24:10
2548
3
原创 二叉查找树详解
二叉查找树性质1、二叉树每个树的节点最多有两个子节点的树叫做二叉树。2、二叉查找树一颗二叉查找树是按照二叉树的结构来组织的,并且满足一下性质: 一个节点所有左子树上的节点不大于盖节点,所有右子树的节点不小于该节点。 对查找树的操作查询,插入,删除等操作的时间复杂度和树的高度成正比, 因此,构建高效的查找树尤为重要。查找树的遍历先序遍历查找树的遍历可以很简单的采用递归的方法来实现。struct l
2017-03-12 16:36:46
1936
原创 BFS-胜利大逃亡
胜利大逃亡题目:http://acm.hdu.edu.cn/showproblem.php?pid=1253Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在
2017-03-11 15:04:39
451
python thinter,求有此技术经验的大神解决问题,谢谢谢谢。。
2016-12-19
求大神看看!python3 tkinter 的问题,文本框不能获取内容。
2016-12-18
Python异常求助,谢谢谢谢。Python tkinter
2016-12-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人