医学遗传学
3 篇文章
论文解读
6 篇文章
2021-10-10
1.9k 字
6 分钟
Python不能做游戏?
前言
写在前面的话:
有人说,python做不出好的游戏,个人是不赞同的,只能说,python可以用来写游戏,但不适合。
举个最简单的例子,弹弓可以用来拔牙吗?当然可以,只不过人们不用弹弓而已。现在主流的大型游戏的制作,主要用的是C++或者C#,但是,python也可以写出比较好的大型游戏,比如《EVE》,《文明》等等。
但,说句实话,python有两个缺点,一是速度慢,二是语法缺陷。
速度慢是python这类解释性语言的通病。而语法缺陷,举个例子,一个格斗类游戏,武器有如下类型:弓箭,枪,刀等,那么在C++或者C#中,声明一把武器为对应类型可以这样写:
123箭 A = xxx;枪 B =
2021-10-10
2.8k 字
11 分钟
Pygame基础知识
前言
前面我们学习了第一个Pygame程序,接着,我们来了解Pygame中最为常用的几个对象。学完今天的内容,我们就可以开发一个稍微复杂一点的游戏了。
Surface 对象
Surface对象表示的是一个矩形的2D图像,这个图像,实际上是由非常多的像素点组成的,比如一个(300px , 400潘鑫)的Surface对象,这个矩形2D图像由300*400个像素点组成。可以通过调用Pygame的绘制函数,来对一个Surface对象的某些区域进行填充,从而达到修改整个2D图像的效果。需要注意的是,窗口的边框,标题栏,按钮并不属于Surface对象的一部分。
我们把通过pygame.display
2021-10-07
1.2k 字
5 分钟
王者荣耀英雄皮肤图片爬取
前言
众所周知,python在爬虫领域有着得天独厚的优势,今天,我们来用python爬取王者荣耀英雄皮肤图片。
本章中,我会着重带大家了解爬取网页的基本流程。
网页分析
首先,咱去王者荣耀的官网瞧瞧:王者荣耀官方网站-腾讯游戏 (建议用谷歌浏览器),我们的目标是,找到英雄皮肤的url地址,如下图,官网是这样的:
发现图中的红框部分-----英雄资料,点进去看看:
往下滑,我们可以发现好多的英雄头像,点一个进去看看,比如貂蝉姐姐:
如上图,我们看到了貂蝉的所有皮肤, 现在我们要找到这些皮肤的url地址,鼠标放至皮肤图片处,在谷歌浏览器中,按F12调出开发者工具,可以看到如下内容:
我
2021-09-15
896 字
4 分钟
你会几种“复制”文本的方式?
前言
最近有一位朋友学习了I/O流,他提出了这样一个问题:现在有一个简单的haha.txt文件,利用IO流将haha.txt中的所有文本复制到第二个txt文件:haha2.txt中,问有多少种方式?
I/O流是Java中一个比较重要的模块,但是jdk中与IO流有关的类比较繁多,大伙记忆起来也比较繁琐,推荐大家多敲代码,在敲代码的过程中,对记忆这些类会轻松许多。
借那位朋友的问题,我们来复习一下IO流中四种最基本的流。
四种最基本的IO流
FileInputStream 和 FileOutputStream
第一种方式:
利用 FileInputStream 和 FileOutputStr
2021-09-03
3.8k 字
14 分钟
Java多线程详解(线程池)
前言
上一章我们介绍了Java中的Thread类里一些常用的方法。本节我们就来聊一聊线程池。
说到“池”,大家或许都不陌生,在java中,我们有见过数据库连接池,Java常量池,对象池等等,将实体进行“池化”,这种“池化”思想,有助于我们对实体进行统一的管理,监控和调用。
本章的主要内容有:
创建线程池
构造方法的参数解读
四种功能性线程池
关闭线程池
作为经常被面试的一个模块,线程池的概念不是那么通俗易懂,但在实际开发应用中,线程池对程序性能优化有着不可磨灭的贡献。
线程池
线程池效率对比
首先,我们来对比下面两个程序运行的效率。程序一,使用前面我们学过的一般线程:
12345
2021-09-02
3.8k 字
14 分钟
Java多线程详解(深究Thread类)
前言
上一章咱介绍了线程同步,了解了解决线程安全的基本思想----“队列与锁”。
在前几章的介绍中,我们时不时地会使用到sleep()这个方法,知道它可以通过使线程休眠来扩大问题发生的可能性,使开发者能够迅速定位到bug的位置。它是Thread类中一个比较重要的静态方法,那么本章就来介绍一下Thread类中一些常用的方法。
在介绍Thread类里面的方法之前,我们来回顾一下线程的五大状态:
请注意体会,当调用下面的这些方法时,线程的状态是如何变化的。
sleep()
sleep()方法有两种重载:
public static native void sleep(long millis)
2021-08-31
2.8k 字
12 分钟
Java多线程详解(线程同步)
前言
上一章,我们通过几个例子介绍了线程安全问题,而说到线程安全就不得不提到线程同步,它是解决线程安全的一种重要方法。本章就来简单地介绍一下线程同步。
从上一章的学习我们知道,当多个线程操作一个资源的时候,有可能由于线程的不确定切换出现数据不一致的安全问题,因此,我们要解决这个问题,就得想办法使得资源在某个时间戳只能被一个线程访问。基于这样的思想,我们提出了“队列与锁”的策略:
通俗理解,就是将所有线程排成一个队列,给要共享的资源上把锁,只有线程获得该资源的锁之后,才能访问该资源。
这也是线程同步的基本思想。所谓线程同步,是指同一进程中的多个线程相互协调工作从而达到一致性。使用线程同步,在解
2021-08-29
2.6k 字
10 分钟
Java多线程详解(线程不安全案例)
前言
通过前面两章的学习,我们了解了线程的基本概念和创建线程的四种方式。
这一章,我们来谈谈线程安全问题。
也许小伙伴们刚听到这个词语的时候,是一脸懵逼,笔者初学线程安全也是这样的。所以本章从几个案例入手,让小伙伴们尽可能地理解什么是线程安全。
sleep()方法
在学习线程安全之前,我们首先得简单地介绍Thread类中的一个静态方法----sleep()
首先我们要知道,程序运行的速度是非常快的,当CPU调度某个线程开始执行时,由于运行速度太快,此线程可能执行完之后CPU才开始调度其他线程,这样显然不符合并发的特点,因此我们希望能阻塞某个线程的运行,使得其他线程有执行的“机会”,这时我们
2021-08-28
1.3k 字
5 分钟
Java多线程详解(如何创建线程)
前言
前面一章,我们了解了线程的基本概念,从这一章,我们开始学习如何创建一个线程。总的说来,在java中,有四种创建线程的方式:
继承Thread类
实现Runnable接口
实现Callable接口
使用线程池
上述四种创建线程的方式中,我们着重介绍 1,2 ,对于 3,4,小伙伴们作为了解即可。下面用代码来实现这几种创建方式。
继承Thread类
下面的代码中使用了sleep()方法,不太理解的同学可以先放一放,后面我们会详细介绍这个方法。
123456789101112131415161718192021222324252627282930313233/** * * @aut
2021-08-28
1k 字
3 分钟
Java多线程详解(基本概念)
前言
从本章开始,我们就要开始介绍Java中一个非常重要的概念-----多线程。线程化思想是计算机领域的重要思想,有了线程,咱编写的程序才能更为高效准确地运行起来。
首先,咱来了解一下为什么会有线程以及多线程的出现?
实际上,最早出现的计算机主要是为了解决一些复杂的计算问题,这个时期的计算机只能识别一些特定的指令,由于计算机无法存储指令,当用户未输入任何指令的时候,计算机就不会工作,因此很多情况下计算机都处于暂停状态,这样计算机本身的资源并未得到有效的利用。
后来随着科学计算的需要,科学家们开始试着给计算机写入一系列指令,让计算机执行完之后从另一台设备中输出,这样虽然提高了计算机本身资源的利