自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小朱小朱绝不认输的博客

记录一下学习,记录一下心得

  • 博客(73)
  • 收藏
  • 关注

原创 Java实践中的规范问题

最近学习了Java实践排位赛中,对Java使用过程中的一些细节问题的注意。都是平时编程过程中可能不在意的一些小问题,有可能导致大的错误,特此记录一下。主要包括:“JAVA基础语句”编程规范“类的使用”编程规范“异常处理”编程规范分为三个部分的编程规范,在以后使用Java做工程项目的时候需要注意。一、“JAVA基础语句”编程规范1.switch语句要有default分支,除非switch的条件变量是枚举类型2.使用break跳出整个switch语句3.if-else if类型的条件判断,

2021-04-04 22:43:59 13 1

原创 算法(Java)——动态规划

动态规划是经典算法的一种。在算法中动态规划算法的重要性不容置疑,本博客主要是记载自己在刷题和学习过程中对动态规划的一个理解和总结。动态规划定义动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决

2021-03-16 15:33:27 33

原创 算法(Java)——双指针

算法中双指针主要包括首尾双指针(对撞双指针),快慢双指针;通过指针的移动解决问题。

2021-03-15 18:40:15 37

原创 算法(Java)——链表

链表是除数组外,另一个常用的数据结构,算法中经常会对链表进行处理,主要是指针的用法。链表链表结构:public class ListNode {int val;ListNode next;ListNode(int x) { val = x; }}

2021-03-15 16:59:27 31

原创 算法(Java)——二分法查找

在排序数组中,二分法查找是一种高效率方法。

2021-03-14 21:58:57 2696

原创 算法(Java)——字符串String

String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

2021-03-14 16:04:10 1099 1

原创 算法(Java)——位运算、异或

位运算

2021-03-13 21:57:15 801

原创 算法(Java)——二叉树

二叉树在算法中也是比较常用的数据结构,根据二叉树的遍历算法,在算法题中遇到二叉树经常优先考虑递归算法。同时二叉树中的二叉搜索树也是常用的,主要结合中序遍历有序的特性。二叉树...

2021-03-12 21:54:07 277

原创 算法(Java)——HashMap、HashSet、ArrayList

算法中数据存储经常需要用到的数据结构主要就是HashMap、HashSet、ArrayList。HashMap哈希表是由一块地址连续的数组空间构成的,其中每个数组都是一个链表,数组的作用在于快速寻址查找,链表的作用在于快速插入和删除元素,因此,哈希表可以被认为就是链表的数组。HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

2021-03-12 10:47:48 730

原创 算法(Java)——栈、队列、堆

栈在刷算法题中,栈是一种常用的数据结构。下面介绍一些Java中栈的常用的一些方法以及力扣刷题中用到栈的一些题目。Java Stack类,栈是Vector的一个子类,实现后进先出的栈。Stack stackA = new Stack();使用Stack类,由于Stack继承了Vector接口,而Vector底层是一个Object[]数组,那么就要考虑空间扩容和移位的问题,造成速度较慢,可以使用LinkedList来做Stack的容器。1.栈的函数Stack<Integer> stac

2021-03-11 17:27:39 417 1

原创 微信小程序不同js之间传递数据

在做小程序时,需要将一个有页面的数据传到另一个页面的js中使用,这里使用的方法就是通过小程序中的app.js存储,然后在另一个js中取出来使用。将需要使用的变量存储到app.js中。globalData用于存储变量。this.globalData = { }在需要存储的js中,将从接口取出的数据存入到globalData中。success: function (res) { console.log(res); that.setData({

2020-12-24 21:15:35 1184 2

原创 微信小程序实现Echarts图的动态实时刷新

在微信小程序绘制折线图时,选择Echarts。官网如下:https://echarts.apache.org/zh/index.html微信小程序中的应用,就看在微信小程序中使用Echarts。主要就是拷贝 ec-canvas 目录到新建的小程序项目下,然后做相应的调整。github链接如下:https://github.com/ecomfe/echarts-for-weixin然后正式开始在小程序中使用Echarts。我的需求是绘制温度随时间变化的折线图,温度和时间从服务器中获取,因为数据是实时刷

2020-12-24 20:44:45 1339 4

原创 JTWC数据下载及处理

由于最近一段时间JTWC官网的数据无法获取http://www.metoc.navy.mil/jtwc/jtwc.html?western-pacific.官网留下,指不定啥时候又能进了。我现在需要处理JTWC的台风路径数据,于是找到一个新的网站,该网站把多个观测站的数据都整合到一块,需要解析,不过有总比没有强。https://www.ncdc.noaa.gov/ibtracs/index.php?name=ib-v4-access可以根据整理好的CSV筛选数据,直接点CSV,或者进入网站https:

2020-12-16 16:33:44 1403

原创 leetcode解题思路笔记(python)

这个笔记是对从刷题小白开始的解题笔记,对每题的思路简单介绍。1.找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 最简单的方法是直接暴力求解,但不可避免会超出时间限制。然后考虑查找重复数字,可以使用集合去依次存储数字,并判断是否在集合中。 def findR

2020-11-28 23:27:12 41

原创 动态规划-最大连续子序列和

在刷力扣题的时候遇到了一个连续子数组最大和问题,下面是题目的链接和描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。时间复杂度要求为n,因此不能采用穷举遍历的方法,下面介绍两种方法:分治法(nlogn)、动态规划(n)1.分治法分而治之。假如我们有一个很复杂的大问题,很难直接解决它,但是我

2020-11-09 21:53:25 1216

原创 算法(Python)——经典排序算法

0.算法概述(1)分类常见的经典排序算法有10种,可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。(2)时间复杂度排序方法时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性插入排序O(n^2)O(n^2)O(n)O(1)

2020-11-02 22:32:18 1766

原创 python处理FNL数据的grib文件和nc文件(纬度存储的问题)

在使用python处理FNL数据时,2007年及之前的数据存储为grib文件,2007年以后为grib2文件,在数据处理时,将grib2转化为nc文件处理Windows上python读取grib2文件(不用Linux),对grib文件则安装了Anaconda环境处理Windows下xarray+cfgrib读取grib文件。但在根据经纬度读取变量的时候,发现不同文件的存储不同,而变量是根据经纬度存储的下标去获取值,所以需要注意一下不同的文件的存储内容。1.python获取FNL的nc文件对应的变量nc_

2020-10-28 21:46:44 1503

原创 python-Pandas库

Pandas是python数据处理重要的一个第三方库。import pandas as pd一、Pandas库入门1.Pandas库数据类型两个数据类型:Series,DataFrame基于上述数据类型的各类操作基本操作、运算操作、特征类操作、关联类操作Pandas库和Numpy库的区别:NumpyPandas基础数据类型扩展数据类型关注数据的结构表达关注数据的应用表达维度:数据间的关系维度:数据和索引间的关系1.1Pandas的Series类型

2020-10-15 22:41:56 4874

原创 Python作图:Matplotlib库

一、Matplotlib入门1.Matplotlib简单介绍Matplotlib库的使用Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发。Matplotlib.pyplot是绘制各类可视化图形的命令子库。import matplotlib.pyplot as pltplt.savefig()#将输出的图形存储为文件,默认PNG2.plt.plot()plt.plot(x,y)当有两个以上参数时,按照X轴Y轴顺序绘制数据点。plt.axis([-1, 10,

2020-10-13 22:54:28 1393 1

原创 MySQL学习:为什么我的MySQL会“抖”一下?

在平时的工作场景中,有时会发现,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。1.你的 SQL 语句为什么变“慢”了在MySQL学习:一条SQL语句的执行过程第二节一条SQL更新语句是怎么执行的(日志系统)中学习了WAL机制(关键点就是先写日志,再写磁盘)。现在知道了,InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作 redo log(重做日志)

2020-09-30 15:12:19 1567 1

原创 MySQL学习:怎样选择普通索引还是唯一索引?

在MySQL学习:深入浅出索引中学习了MySQL普通索引和唯一索引。了解了普通索引与唯一索引的区别。普通索引:最基本的索引,没有任何限制。唯一索引:与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。今天学习在不同的业务场景下,应该选择普通索引,还是唯一索引?假设在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的 SQL 语句:select n

2020-09-29 22:12:35 1696

原创 MySQL学习:事务到底是隔离的还是不隔离的?

在学习事务隔离级别的时候 MySQL学习:事务的隔离 提到过,如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。在学习行锁的时候 MySQL学习:行锁,怎样减少对性能的影响? 又提到,一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状

2020-09-25 16:12:02 1201

原创 Python学习:垃圾回收机制

Python 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量;计算完成后,再将结果输出到永久性存储器中。如果数据量过大,内存空间管理不善就很容易出现 OOM(out of memory),俗称爆内存,程序可能被操作系统中止。而对于服务器,这种设计为永不中断的系统来说,内存管理则显得更为重要,不然很容易引发内存泄漏。什么是内存泄漏呢?这里的泄漏,并不是说你的内存出现了信息安全问题,被恶意程序利用了,而是指程序本身没有设计好,导致程序未能释放已不再使用的内存。内存泄漏也不是指

2020-09-19 21:00:49 2106

原创 Python学习:并发编程之Asyncio

在Python学习:Python并发编程之Futures学习了 Python 并发编程的一种实现——多线程。本博客继续学习 Python 并发编程的另一种实现方式——Asyncio。在处理 I/O 操作时,使用多线程与普通的单线程相比,效率得到了极大的提高。多线程有诸多优点且应用广泛,但也存在一定的局限性:比如,多线程运行过程容易被打断,因此有可能出现 race condition 的情况;再如,线程切换本身存在一定的损耗,线程数不能无限增加,因此,如果 I/O 操作非常 heavy,多线程很有可能

2020-09-19 17:03:24 1576 2

原创 Python学习:Python GIL(全局解释器锁)

在Python学习:Python并发编程之Futures中解释为什么多线程每次只能有一个线程执行?是由于GIL(全局解释器锁)的存在,导致无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行。通过例子发现了多线程比单线程没什么效率提高,甚至有时候效率更差,多核比单核也没有提高。难道Python的线程是假线程?Python 的线程,的的确确封装了底层的操作系统线程,在 Linux 系统里是 Pthread(全称为 POSIX Thread),而在 Windo

2020-09-18 16:27:45 639

原创 安装eccodes运行代码出错解决

为了在Windows下读取grib文件,在Anaconda环境下安装了xarray+cgrib+eccodes。参考WIndows下xarray+cgrib读取grib文件。在Anaconda下新建虚拟环境安装相应的依赖库,参考Windows下Anaconda的下载,安装与使用。程序在Prompt中正确运行。但在Pycharm中新建project,更换Anaconda新建的虚拟环境下的python解释器运行,报错ECCODES ERROR : Unable to find boot.def. Contex

2020-09-18 09:42:54 2378

原创 Python学习:Python并发编程之Futures

我们每天在各个网站、各个 App 上获取的新闻信息,很大一部分便是通过并发编程版的爬虫获得。正确合理地使用并发编程,无疑会给我们的程序带来极大的性能提升。今天学习理解、运用 Python 中的并发编程——Futures。一、区分并发和并行在操作系统中,并发和并行的概念如下:并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。简言之,是指系统具有处理多个任务的能力。并行:当系统有一个以上

2020-09-17 16:35:42 1013

原创 Windows下xarray+cfgrib读取grib文件

在Windows下读取grib文件,在我上一篇博客Windows上python读取grib2文件(不用Linux)学习了使用wgrib2处理grib2文件,可以直接读,也可以转化为nc文件(转化后python就容易处理了)。而对于grib文件,下载wgrib处理可以,但不能转化为nc文件。本博客学习使用xarray和cgrib读取及转化grib数据。一、气象数据常用格式常用的数据格式包括普通的二进制格式、文本数据、NetCDF、HDF4/5以及GRIB1/2数据。这里简单介绍一下NetCDF和GRIB1

2020-09-17 11:23:45 3527 10

原创 解决python爬虫时遇到AttributeError: ‘NoneType‘ object has no attribute ‘find_all‘

最近在练习学到的爬虫实例遇到AttributeError: ‘NoneType’ object has no attribute 'find_all’的错误。爬虫要求如下:任务描述:https://movie.douban.com/cinema/later/beijing/ 这个页面描述了北京最近上映的电影,你能否通过 Python 得到这些电影的名称、上映时间和海报呢?这个页面的海报是缩小版的,我希望你能从具体的电影描述页面中抓取到海报。在运行老师给的代码如下:import requestsfr

2020-09-16 22:38:41 4512 1

原创 Python学习:揭秘Python协程

协程是实现并发编程的一种方式。一说并发,肯定想到了多线程 / 多进程模型,没错,多线程 / 多进程,正是解决并发问题的经典模型之一。协程 ,又称为微线程,它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带CPU的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。通俗的理解: 在一个线程中的某个函数中,我们可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的 ,并且切换的次数以及什么时候再切换到原来的函数都由开发者

2020-09-16 22:22:39 1147

原创 Windows下Anaconda的下载,安装与使用

python需要大量的依赖库(如numpy,pandas),安装依赖库的方法主要有两种:直接使用pip命令:pip install ....安装Anaconda:conda install ...相对于前者。Anaconda的安装可以为我们提供好多便利。一、Anaconda的下载Anaconda 官网下载地址:https://anaconda.org/官网中提供的是最新版本python对应的Anaconda。清华镜像下载地址:https://mirrors.tuna.tsinghua.

2020-09-15 11:06:58 2604

原创 Python学习:深入理解迭代器和生成器

在第一次接触 Python 的时候,可能写过类似 for i in [2, 3, 5, 7, 11, 13]: print(i) 这样的语句。for in 语句理解起来很直观形象,比起 C++ 和 java 早期的 for (int i = 0; i < n; i ++) printf("%d\n", a[i]) 这样的语句,不知道简洁清晰到哪里去了。但是, Python 在处理 for in 语句的时候,具体发生了什么吗?什么样的对象可以被 for in 来枚举呢?一、容器、可迭代对象和迭代器

2020-09-13 16:08:34 1161 2

原创 Python学习:强大的装饰器

装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。因此,本博客主要学习函数装饰器的知识以及使用。函数->装饰器一、函数核心知识回顾引入装饰器之前,首先复习一下,必须掌握的函数的几个核心概念。可以学习:Python学习:自定义函数。第一点,在 Python 中,函数也是对象。我们可以把函数赋予变量,比如下面这段代码:def func(message): pri

2020-09-11 16:29:10 931 2

原创 MySQL学习:行锁,怎样减少对性能的影响?

根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。另一个博客学习了全局锁和表级锁MySQL学习:全局锁和表锁。本博客继续学习另一个锁:行锁。MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB 是支持行锁的,这也是 MyISAM 被 InnoDB 替代的重要原因之一。InnoDB与My

2020-09-10 18:56:21 1372

原创 Python学习:Python中参数传递,是值传递,引用传递or其它

本博客主要学习python参数传递机制,了解python的参数是如何传递的。学过其它语言如(C,C++),都知道参数传递有值传递和引用传递,python的参数传递属于哪种?一、值传递和引用传递值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(被调函数新开辟内存空间存放的是实参的副本值

2020-09-09 22:26:20 1218

原创 python读写数据读写csv文件--pandas用法

python中数据处理是比较方便的,经常用的就是读写文件,提取数据等,本博客主要介绍其中的一些用法。Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。一、pandas读取csv文件数据处理过程中csv文件用的比较多。import pandas as pddata = pd.read_csv('F:/Zhu/test/test.csv')下面看一下pd.read_csv常用的参数:pandas.rea

2020-09-09 17:06:57 1521

原创 MySQL学习:全局锁和表锁

数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。锁是用于多用户并发控制的。用途:是用来解决多用户并发冲突的。(产生并发冲突,将出现错误的数据)缺点:会引起多用户的死锁和阻塞,影响效率。使用锁的原则:(在解决了多用户并发冲突的条件下)尽可能减少锁引起的阻塞。尽可能避免锁引起的死锁(本质上也是由相互阻塞引起)最大程度的并发执行根据加锁的范围,MySQL 里面的锁大致可以分成全局锁

2020-09-09 09:46:43 1434

原创 Python学习:Python对象的比较、拷贝

我们在写python代码时,经常用到 Python 对象比较和复制的语句,但语句背后发生了什么,总是不清楚。举一些我们用到的例子:判断a和b是否相等的例子:if a == b: ...两个列表之间的拷贝,l2 就是 l1 的拷贝。l1 = [1, 2, 3]l2 = list(l1)其中a == b是比较两个对象的值相等,还是两个对象完全相等呢?l2 是 l1 的浅拷贝(shallow copy)还是深度拷贝(deep copy)呢?一、比较’==’ VS ‘is’等于()

2020-09-08 15:01:22 1074

原创 Python学习:面向对象(下):实现一个搜索引擎

根据学到的面向对象的一些知识,然后模拟敏捷开发过程中的迭代开发流程,巩固面向对象的程序设计思想。从最简单最直接的搜索做起,一步步优化,但不可避免会介绍一些现代搜索引擎中的基础概念,例如语料(corpus)、倒序索引(inverted index)等。一、“高大上”的搜索引擎一个搜索引擎由搜索器、索引器、检索器和用户接口四个部分组成。搜索器,通俗来讲就是我们常提到的爬虫(scrawler),它能在互联网上大量爬取各类网站的内容,送给索引器。索引器拿到网页和内容后,会对内容进行处理,形成索引(index)

2020-09-06 17:16:05 928

原创 Python学习:面向对象(上),你找到了吗?

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。我们先来学习,面向对象编程中最基本的概念。一、面向对象基本概念我们先来看一段最基本的 Python 面向对象的应用代码,根据代码了解概念:class Document(): def __init__(self, title, author, context): print('init function called')

2020-09-05 19:02:12 2332

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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