河南云和数据吧
关注: 122 贴子: 1,103

在云和,再出发。

  • 目录:
  • IT业
  • 0
    目前很多APP都开始显示用户的IP归属地了。那对于程序员来说,如何实现这个功能呢?要想知道用户归属地只要知道用户的ip即可,有了ip横容易通过第三方api查询到归属地。那如何得到用户的ip地址呢?如果是JAVA开发者,那这个功能还是比较简单的。在WEB项目开发时用户的请求会被封装到HttpServletRequest对象中,我们可以调用这个对象中的getRemoteAddr方法就能获取到用户的IP地址了。但是这种方法有一些例外: 1、客户端使用了反向代理软件。这个时候通
    wangxu 11-10
  • 0
    wangxu 2023-03
    什么是AOP? AOP(Aspect Oriented Programming),面向切面编程,AOP不是单独指某一种技术,而是一种编程思想,AOP是OOP的一种补充,用于处理各个业务逻辑中的横切关注点,比如日志记录,事务处理,性能统计,异常处理等等。 AOP的主要功能是将大量的通用行为从业务逻辑中抽取出来,将这些行为封装成独立的非业务方法,用于横向切入,这些行为不会对已有的业务逻辑产生任何影响。 AOP是一种设计思想,而Spring AOP则是符合AOP思想的一种框架实现。 spring
    wangxu 3-7
  • 1
    云,这是继个人计算机变革、互联网变革之后的第三次IT大潮。 如果说蒸汽机和电力开启了人类历史上的两次工业革命,那么发展到今天、脱胎于互联网,但又被称作”革命性计算模型”的云计算,正在让我们的生活步入另一个阶段。 什么是云计算 对于了解IT互联网的小伙伴们来说,目前最流行的几个词莫过于5G、大数据、云计算以及人工智能了。 5G主要拼的是网络传输速度,大数据是通过某些特定的方式或工具实现海量数据的分析,而人工智能则主
  • 5
    导读:在过去一周(12.24-12.28)里,教育行业要闻有:①教育部:全国各地已整改有问题的校外培训机构达到94%②个税改革助力全阶段教育事业③爱奇艺发起“希望盒子”,助力教育扶贫④花呗设立5亿元教育专项基金,启动年轻人成长计划⑤新东方在线正式发布“网师学院”战略等。 以下是一周教育行业大事件详细信息: 一、政策篇 1、工信部:到2025年,虚拟现实产业整体实力进入全球前列 12月25日,工信部在官网发布《关于加快推进虚拟现实产业发
  • 0
    1、可快速构建独立的Spring应用 Spring Boot主要是通过注解和自动化配置的方式推出的全新框架,旨在快速、敏捷的开发新一代基于Spring框架的应用程序。在构建Spring Boot项目时,只要根据需求选择对应的场景依赖,Spring Boot会自动添加该场景所需要的全部依赖并提供自动化配置,在无需额外手动添加配置的情况下可以快速构建出一个独立的Spring应用程序。 2、直接嵌入Tomcat、Jetty和Undertow服务器(无需部署WAR文件) Spring Boot项目不需要像传统的Spring应用一样
    wangxu 1-13
  • 0
    SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。 简而言之,SQL 注入就是在用户输入的字符串中加入 SQL 语句,如果在设计不良的程序中忽
    wangxu 1-12
  • 0
    Spring是一个非常优秀的开源框架,项目源码中所使用的设计模式随处可见,这篇文章主要记录一下Spring中常见的设计模式: (1)工厂模式:工厂模式是把创建对象的任务交给工厂,从而来降低类与类之间的耦合。Spring最主要的两个特性就是AOP和IOC,其中IOC就是控制反转,将对象的控制权转移给Spring,并由Spring创建实例和管理各个实例之间的依赖关系,其中,对象的创建就是通过BeanFactory 和 ApplicationContext 完成的。 (2)单例模式:在Spring中的Bean默认
    wangxu 1-11
  • 0
    开闭原则: 1、基本介绍 1) 开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则。 2) 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节 3) 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化,软件中的对象(类、模块、函数等等)应该对于扩展是开放的,但是对于修改时封闭的。 4) 编程中遵循其它原则,以及使用设计
    wangxu 1-10
  • 0
    依赖倒转原则(DIP): 1、基本介绍 1) 高层模块不应该依赖低层模块,二者都应该依赖其抽象 2) 抽象不应该依赖细节,细节应该依赖抽象 3) 依赖倒转(倒置)的中心思想是面向接口编程 4) 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类 5) 使用接口或抽象类的目的是制定好规范,而不涉及任何具
    wangxu 1-9
  • 0
    单一职责原则: 1、基本介绍 对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为 A1,A2 2、单一职责原则注意事项和细节 1) 降低类的复杂度,一个类只负责一项职责,这个需要结合实际的开发需求。 2) 提高类的可读性,可维护性 3) 降低变更引起的风险 4) 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级
    wangxu 1-6
  • 0
    1、设计模式的目的 编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 1) 代码重用性 (即:相同功能的代码,不用多次编写) 2) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解) 3) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) 4) 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响) 5) 使程序呈现高内聚,低耦合的特
    wangxu 1-5
  • 0
    1、保存的位置不同 cookie保存在浏览器端,session保存在服务端。 2、使用方式不同 cookie如果在浏览器端对cookie进行设置对应的时间,则cookie保存在本地硬盘中,此时如果没有过期,则就可以使用,如果过期则就删除。如果没有对cookie设置时间,则默认关闭浏览器,则cookie就会删除。 session:我们在请求中,如果发送的请求中存在sessionId,则就会找到对应的session对象,如果不存在sessionId,则在服务器端就会创建一个session对象,并且将sessionId返回给浏览器
    wangxu 1-4
  • 0
    数据库索引是对数据库表中一列或多列进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。数据库索引就像书的目录,能加快数据库的查询速度。 索引分类 1、按功能逻辑分 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个 唯一索引:加速查询 + 列值唯一(可以有null) 普通索引:仅加速查询 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并 全文索引:对文本的内容进行分词,进行搜索 2、按
    wangxu 1-3
  • 0
    在SQL标准中定义了四种隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 (1)Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。 (2)Read Committed(读取提交内容) 这是大
    wangxu 12-30
  • 0
    事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。 原子性(Atomicity) 单个事务,为一个不可分割的最小工作单元,整个事务中的所有操作要么全部commit成功,要么全部失败rollback,对于一个事务来说,不可能只执行其中的一部分SQL操作,这就是事务的原子性。 一致性(Consistency) 数据库总是从一个一致性的状态转换到另外一个一致性的状态。在前面的例子中, 一致性
    wangxu 12-29
  • 0
    序列化就是一种用来处理对象流的机制,将对象的内容进行流化。可以对流化后的对象进行读写操作,可以将流化后的对象传输于网络之间。序列化是为了解决在对象流读写操作时所引发的问题。 简单来说: 序列化: 将数据结构或对象转换成二进制字节流的过程 反序列化:将在序列化过程中所生成的二进制字节流的过程转换成数据结构或者对象的过程 serialVersionUID的作用: 其目的是序列化对象版本控制,有关各版本反序列化时是否兼容。如果在新
    wangxu 12-28
  • 0
    Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。 collection 常用方法: add(Object o)向集合中添加一个元素 addAll(Collection c)向集合中添加集合 c 中的所有元素 clear() 清除所有元素 contains(Object o) 判断集合中是否包含指定元素 isEmpty()判断集合是否为空 iterator()
    wangxu 12-27
  • 0
    当我们将一个类A放置于另一个类B的内部定义时,那么我们称A为内部类(或嵌套类),称B为外部类(或宿主类)。 内部类的主要作用内部类提供了更好的封装效果,可以将内部类隐藏在外部类之内,在内部类中完成封装效果; 内部类成员可以直接访问外部类的私有数据,可以作为外部类的成员,一个类中的成员可以相互访问; 匿名内部类可以用于创建仅需要使用一次的类; 内部类分类: • 成员内部类:作为成员对象的内部类。可以访问 private 及以上外
    wangxu 12-26
  • 0
    继承:对象的一个新类可以从现有的类中派生,派生类可以从它的基类那继承方法和实例变量,且派生类可以修改或新增新的方法使之更适合特殊的需求。 1、减少了代码的冗余 2、便于功能的扩展 3、为之后的多态性的使用提供了前提 封装 核心思想就是“隐藏细节”、“数据安全”:将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。 1、高内聚:类的内保
    wangxu 12-23
  • 0
    NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。如下图所示: NIO和传统IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字
    wangxu 12-22
  • 0
    1.Optional作用 Optional类JDK8开始引入的,为的是能够更加优雅地处理NullPointerException,优雅地判空和处理空值。Optional对象是一种包装器对象,包装了类型T的对象或者是没有包装任何对象。若是包装了类型T的对象可以认为值是存在的。Optional类以更安全的方式代替了类型T的引用,这种引用要么就是引用某个对象,要么为null。 2.Optional的创建 Optional.of(object): 创建一个非空的包装对象,若object为null就会报出异常(NPE); Optional.empty(): 创建一个空的optional对象
    wangxu 12-21
  • 0
    1、Lamdba表达式 Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。 2、函数式接口 函数式接口:只包含一个抽象方法的接口,称为函数式接口,并且可以使用lambda表达式来创建该接口的对象,可以在任意函数式接口上使用@FunctionalInterface注解,来检测它是否是符合函数式接口。同时javac也会包含一条声明,
    wangxu 12-20
  • 0
    Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查。被private封装的资源只能类内部访问,外部是不行的,但反射能直接操作类私有属性。反射可以在运行时获取一个类的所有信息,(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法。所以先要获取到每一个字节码文件对应的Class类
    wangxu 12-19
  • 0
    1、InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一; 2、InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败; 3、InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引
    wangxu 12-17
  • 0
    (1)加载 :加载字节码文件,将字节码中的静态变量和常量转换到方法区中,在堆中生成class对象作为方法区入口 (2)连接: 验证:确保加载的类符合JVM规范 准备:正式为类变量(static)分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配,后续初始化时会实际赋值(实例变量会被分配到堆中) 解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程) (3)初始化 :执行类构造器(不是常规的构造方
    wangxu 12-15
  • 0
    线程私有区: (1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧。可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小:java -Xss2M HackTheJava (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一。本地方法一般是用其它语言(C、C++ 或汇编语言等)编写的,并且被编译为基于本机硬件和操作系统的程序,对待
    wangxu 12-14
  • 0
    一:ThreadLocal是什么? ThreadLocal,即线程本地变量。一个共享变量存进该容器相当于在线程内部拷贝了一个副本。ThreadLocal里面的变量都是存在当前线程的。当操作ThreadLocal里面的变量时,实际操作的是存在自己线程的那个变量副本,该变量副本对于每一个线程都是独立的,从而实现了变量的隔离性,保证了线程安全。 ThreadLocal提供的实际上就是一种线程隔离,不同的线程的变量归属不同的线程,线程之间不能想问访问各自的变量,当线程生命周期结束
    wangxu 12-13
  • 0
    ArratList的底层使用动态数组,默认容量为10,当元素数量到达容量时,生成一个新的数组,大小为前一次的1.5倍,然后将原来的数组copy过来;因为数组有索引,所以ArrayList查找数据更快,但是添加数据效率更低 LinkedList的底层使用链表,在内存中是离散的,没有扩容机制;LinkedList在查找数据时需要从头遍历,所以查找慢,但是添加数据效率更高。 LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,
    wangxu 12-12
  • 0
    1、hashCode()和equals()的关系 hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的索引位置;equals() 的作用是用来判断两个对象是否相等。 如果两个对象相等,则它们必须有相同的哈希码 如果两个对象有相同的哈希码,则它们未必相等 2、为什么要重写hashCode()和equals() Object类提供的equals()方法默认是用==来进行比较的,也就是说只有两个对象是同一个对象时,才能返回相等的结果。而
    wangxu 12-9
  • 0
    相同点: 都用来代表字符串,底层都是通过char数组实现的。 不同点: 1、String类是不可变类,String对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象;而StringBuffer和StringBuilder对象的值是可以被修改的;即任何对String的改变会引发新的String对象的生成。 2、StringBuffer和StringBuilder类则是可变类,他俩的原理和操作基本相同,任何对它所指代的字符串的改变都不会产生新的对象。StringBuffer几乎所有的方法都使用syn
    wangxu 12-8
  • 0
    语法上的区别: 1、抽象类的特点 (1)抽象类不能被实例化,即不能使用new关键字来实例化对象,只能被继承; (2)包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法; (3)抽象类中的抽象方法的修饰符只能为public或者protected,默认为public; (4)抽象类中的抽象方法只有方法体,没有具体实现; (5)如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类; (6)抽象类可以包含属性、
    wangxu 12-7
  • 0
    1、什么是线程池 线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。 2、四种线程池的创建: (1) newCachedThreadPool 创建一个可缓存线程池 (2) newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数。 (3) newScheduledThreadPool 创
    wangxu 12-6
  • 0
    (1) 发挥多核 CPU 的优势 多线程,可以真正发挥出多核 CPU 的优势来,达到充分利用 CPU 的目的,采用多线程的方式去同时完成几件事情而不互相干扰。 (2) 防止阻塞 从程序运行效率的角度来看,单核 CPU 不但不会发挥出多线程的优势,反而会因为在单核CPU 上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核 CPU 我们还是要应用多线程,就是为了防止阻塞。试想,如果单核 CPU 使用单线程,那么只要这个线程阻塞了,比方说远程
    wangxu 12-5
  • 0
    创建线程的方式: (1) 继承 Thread 类创建线程类 (2) 通过 Runnable 接口创建线程类 (3) 通过 Callable 和 Future 创建线程 创建线程的三种方式对比: (1) 采用实现 Runnable、Callable 接口的方式创建多线程。优势是: 线程类只是实现了 Runnable 接口或 Callable 接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个 target 对象,所以非常适合多个相同线程来处理同一份资源的情况, 从而可以将 CPU、代码和数据分开,形成清晰的模型,较好地体现
    wangxu 12-3
  • 0
    Future字面理解是未来的意思,所以Future代表一个未来任务的返回对象,专业一点说就是一个异步计算的结果(或者说是子线程的返回对象),并且它提供一些方法来让调用者检测异步过程是否完成,或者取得异步计算的结果,或者取消正在执行的异步任务。 在并发编程中,我们经常用到非阻塞的模型,在之前的多线程的三种实现中,不管是继承thread 类还是实现 runnable 接口,都无法保证获取到之前的执行结果。通过实现 Callback 接口,并用 Future 可以来
    wangxu 12-2
  • 0
    红黑树规则: 1、节点不是黑色,就是红色(非黑即红) 2、根节点为黑色 3、叶节点为黑色(叶节点是指末梢的空节点 Nil或Null) 4、一个节点为红色,则其两个子节点必须是黑色的(根到叶子的所有路径,不可能存在两个连续的红色节点) 5、每个节点到叶子节点的所有路径,都包含相同数目的黑色节点(相同的黑色高度) 规则说明: 1、约束4和5,保证了红黑树的大致平衡:根到叶子的所有路径中,最长路径不会超过最短路径的2倍。 2、使得红黑树
    wangxu 11-30
  • 0
    锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利。 但是很多 synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为涉及到不断挂起、恢复问题,这期间消耗的时间可能会更长。既然synchronized 里面的代码执行得非常快, 不妨让等待锁的线程不要被阻塞, 而是在synchronized 的边界做忙循环,
    wangxu 11-28

  • 发贴红色标题
  • 显示红名
  • 签到六倍经验

赠送补签卡1张,获得[经验书购买权]

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!

本吧信息 查看详情>>

会员: 会员

目录: IT业

友情贴吧