<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Travor Philip的blog]]></title><description><![CDATA[CS新手，欢迎交流~]]></description><link>https://blog.youkuaiyun.com/TravorPhilips</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TravorPhilips]]></copyright><item><title><![CDATA[ubuntu python版本]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/123307782</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/123307782</guid><author>TravorPhilips</author><pubDate>Sun, 06 Mar 2022 11:51:30 +0800</pubDate><description><![CDATA[ubuntu18.04自带python3.6
安装不同版本python：

从官网下载源码编译安装
apt install python3.7-minimal

切换默认版本：
update-alternatives是管理Linux软件版本的工具，标准格式--install link name path priority
install是注册服务。
link是注册最终地址，把命令在这个固定的目的地址做真实命令的软链，以后管理就是管理这个软链
服务名，命令行直接打开的服务。
path被管理的软件的绝对路径。
]]></description><category></category></item><item><title><![CDATA[缓存Bitmap]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/123098658</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/123098658</guid><author>TravorPhilips</author><pubDate>Wed, 23 Feb 2022 20:33:20 +0800</pubDate><description><![CDATA[在 Android 中处理位图和其他图片相关的任务时， Glide  可以完成大部分复杂工作。如果要自己实现缓存Bitmap可以用以下方法。
应用场景
系统通过循环利用移出屏幕的子视图来限制ListView, GridView之类的视图对内存的占用。垃圾回收器假设程序不会保留任何长期的引用，因此也会释放已加载的位图。但是为了确保能够流畅地加载界面，必须避免每次子视图返回到屏幕上时都要处理图片。采用内存和磁盘缓存会让组件快速重新加载经过处理的图片。
使用内存缓存
使用内存缓存位图。LruCache 类非常适用]]></description><category></category></item><item><title><![CDATA[获取视图控件的方法findViewById、kotlin-android-extensions、ViewBinding]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/123065236</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/123065236</guid><author>TravorPhilips</author><pubDate>Tue, 22 Feb 2022 12:02:07 +0800</pubDate><description><![CDATA[kotlin-android-extensions和ViewBinding
findViewById
使用findViewById时，最终会调用ViewGroup中的findViewTraversal，这个方法会遍历所有的子View，形成一个递归查询，找到最末端（View中）。如果找到就会返回这个View并停止查询，如果没找到就会返回为null。在确定要查找的那个View在某个View中的时候，我们调用那个View.findViewById()方法，会减少查询的循环次数，提高效率。
View类似于树的叶子节]]></description><category></category></item><item><title><![CDATA[kotlinx.android.synthetic返回空对象]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/123040118</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/123040118</guid><author>TravorPhilips</author><pubDate>Mon, 21 Feb 2022 09:19:12 +0800</pubDate><description><![CDATA[引入kotlin-android-extensions插件可以省去在代码中写view.findViewById的麻烦。但需要注意的是，kotlinx.android.synthetic工作的原理是getView().findViewById，所以如果当前位置getView的返回值不等于view，那用kotlinx.android.synthetic可能会返回一个空对象。
getView的说明：

Get the root view for the fragment’s layout (the one ret]]></description><category></category></item><item><title><![CDATA[用Homebrew安装的东西都在哪]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/121772719</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/121772719</guid><author>TravorPhilips</author><pubDate>Tue, 07 Dec 2021 16:32:09 +0800</pubDate><description><![CDATA[brew list [package_name]


]]></description><category></category></item><item><title><![CDATA[VS code ssh连接远程服务器免密验证]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/121772580</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/121772580</guid><author>TravorPhilips</author><pubDate>Tue, 07 Dec 2021 16:29:16 +0800</pubDate><description><![CDATA[如果以前生成过密钥可以直接用，不然就用ssh-keygen生成并选择路径保存：

不管是Windows还是Mac都在 /Users/xxx/.ssh/目录下，xxx是你的用户名。
找到isa.pub文件上传到服务器，内容复制到.ssh/authorized_keys。
重启ssh服务。systemctl restart sshd


...]]></description><category></category></item><item><title><![CDATA[python ModuleNotFoundError]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/121603708</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/121603708</guid><author>TravorPhilips</author><pubDate>Mon, 29 Nov 2021 10:17:48 +0800</pubDate><description><![CDATA[1.在terminal运行时，import默认从以下路径寻找模块

如果找不到或存在多个版本的模块就会报错ModuleNotFoundError。
2.如果是在pycharm venv或conda等虚拟环境就需要检查虚拟环境中是否安装了模块。
3.如果在pytharm中出现Unresolved reference: 设置项目为Source root并重启

...]]></description><category></category></item><item><title><![CDATA[Java并发(2):重入锁、条件变量、synchronized]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/121460735</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/121460735</guid><author>TravorPhilips</author><pubDate>Mon, 22 Nov 2021 22:40:56 +0800</pubDate><description><![CDATA[java并发同步ReentrantLock 锁条件变量
同步
如果多个线程都要对一个对象进行修改，那么最后的结果会取决于两个线程访问数据的顺序，这种情况称为竞态条件。为了避免多线程破坏数据，需要在编写代码时用到同步机制。
ReentrantLock 锁
下面是一个表示账户的类，演示了如何使用重入锁：
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Ac]]></description><category></category></item><item><title><![CDATA[java并发(一):创建线程、线程状态、线程属性]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/121454087</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/121454087</guid><author>TravorPhilips</author><pubDate>Sun, 21 Nov 2021 18:25:37 +0800</pubDate><description><![CDATA[Java线程runnable 创建线程继承thread创建线程调用thread或runnable的run方法线程状态新建可运行阻塞和等待终止线程线程属性中断线程守护线程线程名线程优先级
runnable 创建线程
在一个单独线程中运行一个任务需要三步：
1.需要一个实现了Runnable接口的类，将这个任务需要执行的代码放到这个类的run方法中。
public class multithread implements Runnable{
    public static void main(String[]]></description><category></category></item><item><title><![CDATA[Java lambda表达式]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/121407800</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/121407800</guid><author>TravorPhilips</author><pubDate>Sat, 20 Nov 2021 17:55:38 +0800</pubDate><description><![CDATA[lambda表达式是一个可传递的代码块，传递之后可以被执行多次。
最简单的例子是排序时传入的定制比较器Comparator：
class LenComparator implements Comparator&lt;String&gt;
{
	public int compare(String first, String second){
		return first.length() - second.length();
	}
}
...
Arrays.sort(strings, new LenCompa]]></description><category></category></item><item><title><![CDATA[并发和并行，多任务和多线程]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/121403238</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/121403238</guid><author>TravorPhilips</author><pubDate>Thu, 18 Nov 2021 16:57:40 +0800</pubDate><description><![CDATA[并发 concurrent
同一时刻内有多个程序处于运行状态，在多道程序且只有一个CPU的情况下体现为在同一时刻只有一个程序在占用CPU，其他程序挂起。
并行 parallel
多个CPU分别执行不同的程序，互不影响。
多任务 multitasking
操作系统通过给不同的程序分配CPU时间片来实现“同时”执行多个程序。
多线程 multithreaded
多线程是对程序才有的概念，一个程序“同时”完成多个任务，每个任务交给一个线程。
多进程
进程拥有自己独立的数据，而一个进程下的线程共享数据，所以多线程风]]></description><category></category></item><item><title><![CDATA[Java随机数]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/118463913</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/118463913</guid><author>TravorPhilips</author><pubDate>Sun, 04 Jul 2021 16:35:37 +0800</pubDate><description><![CDATA[import java.util.Random;

class RandomTest{
	public static void main(String[] args) {
		int bound = 10;
		Random random1 = new Random();
		for (int i = 0; i &lt; 10; i++) {
			System.out.println(random1.nextInt(bound));
		}
		
		long seed1 = System.nanoTi.]]></description><category></category></item><item><title><![CDATA[计算机网络-运输层]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/118310244</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/118310244</guid><author>TravorPhilips</author><pubDate>Mon, 28 Jun 2021 19:09:00 +0800</pubDate><description><![CDATA[计算机网络-运输层
文章目录计算机网络-运输层概述多路复用和分解意义多路分解多路复用TCP和UDP的区别UDPUDP的优势使用UDP实现可靠数据传输UDP检验和
概述
运输层为运行在不同端系统上的应用进程之间提供了逻辑通信功能。（网络层提供端系统之间的通信功能）
运输层分组称为报文段，有些标准也把UDP分组称为数据包，而把TCP分组称为报文段。
多路复用和分解
意义
将网络层提供的端系统到端系统的通信扩展到为端系统上运行的应用程序提供进程之间的通信。
一个进程有一个或多个套接字，运输层没有把数据直接给进程，]]></description><category></category></item><item><title><![CDATA[计算机网络-应用层（HTTP、I/O）]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/118295589</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/118295589</guid><author>TravorPhilips</author><pubDate>Mon, 28 Jun 2021 10:23:52 +0800</pubDate><description><![CDATA[计算机网络
文章目录计算机网络应用层应用程序体系结构进程套接字吞吐量TCP和UDP的区别SSLHTTPWeb页面URL报文格式请求回复状态码安全性SSL 安全套接字层对称加密非对称加密HTTP1.xcookiesessionHTTP2.0I/O模型阻塞式I/O非阻塞式I/O多路复用I/O信号驱动I/O异步I/O总结
应用层
应用程序体系结构

客户-服务器体系结构（client- server）服务器性能和安全性需要大量投入
对等结构（P2P）自扩展性，可靠性和安全性难以保障

进程
应用程序通过进程进行通]]></description><category></category></item><item><title><![CDATA[计算机网络-基础概念]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/118178828</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/118178828</guid><author>TravorPhilips</author><pubDate>Thu, 24 Jun 2021 10:14:11 +0800</pubDate><description><![CDATA[计算机网络
文章目录计算机网络基础概念协议分布式应用程序报文和分组排队和丢包协议模型和服务模型封装网络安全1 恶意软件攻击个人计算机2 攻击服务器和网络基础设施3 嗅探分组4 身份伪装应用层应用程序体系结构进程套接字吞吐量TCP和UDP的区别SSLHTTPWeb页面URL报文格式请求回复状态码安全性SSL 安全套接字层对称加密非对称加密HTTP1.xcookiesessionHTTP2.0
基础概念
协议
协议规定了通信实体之间交换报文的格式和顺序，发送报文或接受报文等事件发生时的行为。
分布式应用程序
网]]></description><category></category></item><item><title><![CDATA[Java 单例模式]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/118119327</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/118119327</guid><author>TravorPhilips</author><pubDate>Tue, 22 Jun 2021 22:05:39 +0800</pubDate><description><![CDATA[单例模式
懒汉式 - 线程不安全
class Singleton{
	private static Singleton instance;
	
	private Singleton(){}
	
	public static Singleton getInstance() {
		if (instance == null)
			instance = new Singleton();
		return instance;
	}
}

懒汉式（懒加载）调用时才初始化，避免不必要的加载，提高程序运行效率。
以上代]]></description><category></category></item><item><title><![CDATA[POSIX是什么，为什么需要POSIX]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/116244670</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/116244670</guid><author>TravorPhilips</author><pubDate>Wed, 28 Apr 2021 22:30:57 +0800</pubDate><description><![CDATA[POSIX是可移植操作系统接口（Portable Operating System Interface of UNIX）的缩写，POSIX标准定义了操作系统应该为应用程序提供的接口标准，是在各种UNIX操作系统上运行的软件的一系列API标准的总称。
POSIX标准意在期望获得源代码级别的软件可移植性。换句话说，为一个POSIX兼容的操作系统编写的程序，应该可以在任何其它的POSIX操作系统（即使是来自另一个厂商）上编译执行。
POSIX 并不局限于 UNIX。许多其它的操作系统也支持POSIX，例如Wind]]></description><category></category></item><item><title><![CDATA[pip安装package问题]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/113363304</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/113363304</guid><author>TravorPhilips</author><pubDate>Fri, 29 Jan 2021 08:46:01 +0800</pubDate><description><![CDATA[1、下载失败，换国内源 （地址）
pycharm可以加到repo里，但有时还是下载失败（可能是默认源的问题）

用链接里手动指定源下载比较稳。
2、pip版本或python版本与package不匹配。

]]></description><category></category></item><item><title><![CDATA[剑指offer]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/112388757</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/112388757</guid><author>TravorPhilips</author><pubDate>Sat, 09 Jan 2021 10:51:51 +0800</pubDate><description><![CDATA[03 数组中的重复数字
python
class Solution:
    def findRepeatNumber(self, nums: List[int]) -&gt; int:
        cnt_list = [0 for _ in range(len(nums))]
        for _ in nums:
            cnt_list[_] += 1
        for _ in range(len(nums)):
            if cnt_list[_]]]></description><category></category></item><item><title><![CDATA[CSP和最小冲突算法]]></title><link>https://blog.youkuaiyun.com/TravorPhilips/article/details/111826199</link><guid>https://blog.youkuaiyun.com/TravorPhilips/article/details/111826199</guid><author>TravorPhilips</author><pubDate>Sun, 27 Dec 2020 20:59:49 +0800</pubDate><description><![CDATA[CSP
CSP回溯算法流程

如果变量都已完全赋值，返回。
否则选择一个未赋值的变量 v。
给 v 赋值。
如果不冲突，寻找下一个未赋值变量。
如果冲突，尝试 v 的另一种赋值。
当 v 的所有可能取值都冲突时，回溯到 v 的前一个变量 u。
给 u 重新赋值。

优化

在选择未赋值变量时：优先选择剩余值少的，也就是取值范围小的。
在赋值时，优先选择约束少的，也就是对其他变量取值影响小的。
提前预判，在调用下一层之前就知道下层调用有没有必要做（根据约束进行推论，inference函数）？

Min-Con]]></description><category></category></item></channel></rss>