<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[nosprings的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/nosprings</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nosprings]]></copyright><item><title><![CDATA[Java基础：数据结构，写一个简单的链表实现]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/110931417</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/110931417</guid><author>nosprings</author><pubDate>Wed, 09 Dec 2020 17:33:32 +0800</pubDate><description><![CDATA[class Node{
	int key;  // private 是私有的属性
	int value;
	Node next; // 
	
	public Node(int key, int value) {
		this.key = key;
		this.value = value;
		this.next = null;
	}
}

public class MyLinkList{
	private Node head; // 头节点 默认就是null
	public MyLinkList() {.]]></description><category></category></item><item><title><![CDATA[Java基础：数据结构，实现简单的二叉树结构，使用递归先序、后续、中序遍历]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/110931238</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/110931238</guid><author>nosprings</author><pubDate>Wed, 09 Dec 2020 17:27:34 +0800</pubDate><description><![CDATA[/**
 * 二叉树的节点结构
 * @author user
 *
 */
class TreeNode{
	String key;
	int    value;
	TreeNode leftNode;   // 默认就是null
	TreeNode rightNode;
	
	public TreeNode(String key, int value) {
		this.key = key;
		this.value = value;
		leftNode = null;
		rightNode = .]]></description><category></category></item><item><title><![CDATA[Java基础：数据结构，实现简单栈结构]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/110930823</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/110930823</guid><author>nosprings</author><pubDate>Wed, 09 Dec 2020 17:23:37 +0800</pubDate><description><![CDATA[public class Stack {
 
 private int  size; // 定义栈大小
 private int[] stack;// 使用int数组来模拟一个栈结构
 private int  top;
 private int  bottom=0; // bottom == 0 栈低
 
 // 类的构造方法，构造一个空的栈
 public Stack(int size) {
  this.size = size; //...]]></description><category></category></item><item><title><![CDATA[Java基础：数据结构，实现简单的循环队列]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/110930771</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/110930771</guid><author>nosprings</author><pubDate>Wed, 09 Dec 2020 17:22:05 +0800</pubDate><description><![CDATA[/**
*
* 循环队列 FIFO first in first out
* @author liuhaibing
*
*/
public class Queue {
 
 //
 private int head;
 private int end;
 private int size;
 private int[] queue;
 /**
  * 初始化一个size大小的空队列
  * @param size
  */
...]]></description><category></category></item><item><title><![CDATA[人工智能神经网络：手写了一个RNN，预测序列，精准]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/108241568</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/108241568</guid><author>nosprings</author><pubDate>Wed, 26 Aug 2020 16:06:17 +0800</pubDate><description><![CDATA[1、RNN单向循环神经网络实现

2、隐藏层激活使用的是tanh、输出层使用的激活函数是softmax

3、代码纯手写




import numpy as np
from activator.softmax import SoftMax
from activator.tanh import Tanh

'''
    @author: liuhaibing
'''
# 手写循环神经网络
# 全连接层只用三层input-hidden-output

class RNN():

    def __in.]]></description><category></category></item><item><title><![CDATA[人工智能神经网络：200行代码手写了一个全连接神经网络（NN），基于FP和BP算法，单条数据计算更新梯度，速度比较慢，计划改为批量计算，代码详细注释]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/107059586</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/107059586</guid><author>nosprings</author><pubDate>Wed, 01 Jul 2020 11:40:01 +0800</pubDate><description><![CDATA[1.算法原理就是FP和BP算法，采用的梯度下降更新梯度。

2.算法的loss函数还是交叉熵函数，也是常用的分类loss函数。

3.训练数据集是使用的mnist数据集，但是是处理好的，用csv文件保存的结构。

4.目前没有写算法说明，回头再更吧，算法有详细的注释。


import numpy as np

# 基于交叉熵的loss函数计算和梯度
class CrossEntropy():

    # 正向计算
    def forward(self, input, y):
        '''
]]></description><category></category></item><item><title><![CDATA[Python3核心编程一：Python语言简介]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/107040968</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/107040968</guid><author>nosprings</author><pubDate>Tue, 30 Jun 2020 13:50:56 +0800</pubDate><description><![CDATA[第1章 Python语言简介
1.1 Python起源
Python编程语言的创造者是Guido von Rossum，荷兰人，一位数学和计算机技术专家。他在1991年,发布了第一个Python编译器版本。Python的编译器是使用C编写的，所以Python代码能够很容易地调用C库。因为Python是面向对象的解释性语言，所以其编译器同时也是解释器。如图1-1-1所示，Python脚本的执行过程。

图1-1-1
截至当前，在TIOBE排名，图1-1-2所示，Python排名第三：

1.2 Python特]]></description><category></category></item><item><title><![CDATA[人工智能框架TensorFlow2：TensorFlow2.1框架介绍和安装，编写第一个TensorFlow]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104614719</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104614719</guid><author>nosprings</author><pubDate>Tue, 23 Jun 2020 16:04:30 +0800</pubDate><description><![CDATA[1、学习前必须了解的概念：张量和数据流图

1.1、张量：可以认为是数组和常量的总称呼

在数学上，我们通常用一维数组和多维数组表示一组数据，比如：

我们要表示一个人的身高，体重，年龄可以写成 [175, 70, 30]这样的一维数组形式

这个数组的第一个元素表示身高，第二元素表示体重，第三个元素表示年龄，这个一维数组可以认为是一维张量

如果要表示3个人的身高体重，可以写成二维结构

[ [...]]></description><category></category></item><item><title><![CDATA[Python基础：理解SQL注入问题的起因，掌握pymysql参数化防止黑客使用SQL注入浸入系统和拖库]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/106915908</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/106915908</guid><author>nosprings</author><pubDate>Tue, 23 Jun 2020 13:18:37 +0800</pubDate><description><![CDATA[1、首先我们了解一下什么叫SQL注入问题

SQL注入是一个很古老的系统安全问题，黑客可以通过构造字符串，尝试改变实际执行的SQL语句，从而达到绕过系统认证，或者提取系统中自己没有权限的数据来脱库。出现这个问题的根本原因是开发者在使用SQL的时候，采用的是拼接字符串的方式来实现SQL语句的参数传值，当然这种问题在ORM框架盛行的今天其实出现概率已经很小了，具体例子如下：


	SQL注入绕过认证原理，如下代码就存在绕过认证的安全问题：
	

	正常情况下，使用正确和错误的用户名和密码都能够限制认证
	
 .]]></description><category></category></item><item><title><![CDATA[Python基础：使用lambda表达式写一个递归，实现输出斐波那契数列]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104858989</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104858989</guid><author>nosprings</author><pubDate>Sat, 14 Mar 2020 13:26:17 +0800</pubDate><description><![CDATA[# 使用lambda表达式写一个递归，实现输出斐波那契数列
lambdafunc = lambda n : 1 if n == 1 or n == 2 else lambdafunc(n -1 ) + lambdafunc(n - 2)

print(lambdafunc(6))

# 列出10个月的兔子的数量的变化
listA = [lambdafunc(i) for i in range(1...]]></description><category></category></item><item><title><![CDATA[Python基础：Python中的装饰器和实现通用的装饰器，实现对任意函数的性能统计测试]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104850770</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104850770</guid><author>nosprings</author><pubDate>Fri, 13 Mar 2020 22:04:54 +0800</pubDate><description><![CDATA[# 装饰器

# 定义装饰器
def decorator(f):
    def innerfunc():
        print("调用前")
        f()
        print("调用后")
        pass
    return innerfunc  # 外部函数 要返回内部函数
    pass

@decorator
def calSum():
    pr...]]></description><category></category></item><item><title><![CDATA[Python基础：Python的继承，多继承和多重继承举例]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104850720</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104850720</guid><author>nosprings</author><pubDate>Fri, 13 Mar 2020 22:02:17 +0800</pubDate><description><![CDATA[# 继承 重用代码  提高软件的可扩展性
class Animal():
    def __init__(self, name):
        print(1)
        self.name = name
        pass
    def eat(self, food):
        print(self.name + "吃" + food)
        pass
 ...]]></description><category></category></item><item><title><![CDATA[Python基础：多线程下的条件锁（Condition）实现生产者消费者模式，搞懂线程之间的通讯]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104850624</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104850624</guid><author>nosprings</author><pubDate>Fri, 13 Mar 2020 21:59:34 +0800</pubDate><description><![CDATA[import threading
import time
condtion = threading.Condition()
sheep = ['1吨羊肉串','1吨羊肉串','1吨羊肉串','1吨羊肉串','1吨羊肉串'] # 做大的长度是10，10吨羊肉

# 厂商 多个加工厂
class Producer(threading.Thread):
    def __init__(self, n...]]></description><category></category></item><item><title><![CDATA[Python基础：自己写一个Python的range实现，支持到上界，支持小数步长]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104850592</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104850592</guid><author>nosprings</author><pubDate>Fri, 13 Mar 2020 21:55:55 +0800</pubDate><description><![CDATA[# 自定义实现 range功能 (1, 3, 1)
# 课堂完善越界的问题
def myRange(start, end, step): # -1
    if step &gt; 0 and end &gt; start:
        start = start - step
        while start &lt; end:
            start = start +...]]></description><category></category></item><item><title><![CDATA[Python爬虫基础：安装Scrapy爬虫框架和创建Scrapy爬虫项目]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104333490</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104333490</guid><author>nosprings</author><pubDate>Sat, 15 Feb 2020 20:24:04 +0800</pubDate><description><![CDATA[首先为了避免国外镜像不稳定，我们使用了清华大学的python库镜像：https://pypi.tuna.tsinghua.edu.cn/simple

1、安装scrapy

1.1、安装pywin32（解决python调用windows系统库的问题）

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pywin32

1.2、安装...]]></description><category></category></item><item><title><![CDATA[华为GaussDB：封装JDBC数据连接访问华为GaussDB数据库实现CRUD]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104206848</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104206848</guid><author>nosprings</author><pubDate>Fri, 07 Feb 2020 11:18:33 +0800</pubDate><description><![CDATA[1.创建数据库表和索引（数据库操作工具使用的是华为Data Studio）



设置数据库主键列：





创建系列，用于生成唯一主键ID：




select dbuser.user_seq.nextval from sys_dummy；






2.封装高斯数据库JDBC访问类

•下载GaussDB数据库JDBC驱动jar包：


JDBC包名： com.huawei.gaus...]]></description><category></category></item><item><title><![CDATA[华为GaussDB：使用Data Studio远程访问华为GaussDB服务器（基于华为鲲鹏云）]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/104184508</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/104184508</guid><author>nosprings</author><pubDate>Wed, 05 Feb 2020 16:39:45 +0800</pubDate><description><![CDATA[Gauss数据库服务器已经安装好，在华为鲲鹏云服务器，这里不赘述：

1、修改白名单，允许远程设备访问服务器

1、服务器上登录数据库。
zsql sys/Changeme_123@127.0.0.1:1888
2、添加白名单IP地址，直接生效，121.244.146.94,120.244.146.94这两个是家里网关的外网地址，这个网上可以查。
ALTER SYSTEM SET TCP_INVI...]]></description><category></category></item><item><title><![CDATA[Java设计模式：深度解析单例模式之懒汉模式和饿汉模式]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/103983004</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/103983004</guid><author>nosprings</author><pubDate>Wed, 15 Jan 2020 09:05:17 +0800</pubDate><description><![CDATA[1、什么是单例模式：

形象地说就是世界上的每个人都是唯一的个体，不能存在两个我，对应Java的世界，就是类只能有一个对象实例，也就是只能new出一个对象。

Java中存在两种单例模式的写法，懒汉模式和饿汉模式，懒汉模式比较好理解，就是加锁，饿汉模式其实需要了解Java的类加载机制才能够理解得更加充分。

首先是懒汉模式，实现如下：


public class Singleton {
	pri...]]></description><category></category></item><item><title><![CDATA[Java入门基础：linux centos下安装和配置jdk8]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/103975455</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/103975455</guid><author>nosprings</author><pubDate>Tue, 14 Jan 2020 16:26:17 +0800</pubDate><description><![CDATA[1、下载JDK8

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



2、使用FileZilla将文件上传到服务器：



3、解压安装包

tar -zxvf jdk-8u231-linux-arm64-vfp-hflt.tar.gz

4、创建文件夹：

mkdir /...]]></description><category></category></item><item><title><![CDATA[Java入门基础：基于源码深度剖析==和equals的区别，注意存在Java内存池的特殊情况]]></title><link>https://blog.youkuaiyun.com/nosprings/article/details/103973745</link><guid>https://blog.youkuaiyun.com/nosprings/article/details/103973745</guid><author>nosprings</author><pubDate>Tue, 14 Jan 2020 15:45:15 +0800</pubDate><description><![CDATA[1.基本数据类型，也称原始数据类型。

byte,short,char,int,long,float,double,boolean
他们之间的比较，应用双等号（==）,比较的是他们的值


// 基本数据类型比较值
int a = 1;
int b = 1;
float c = 1.0f;
		
System.out.println(a == b); //  true
System.out.pri...]]></description><category></category></item></channel></rss>