首页 > 数据库 >Redis Desktop Manager连不上服务器的redis; Java 死锁; 泛型; 事务; servlet; Spring事务; 集合; 集合的分类; java8新特性; 常见的注解实例

Redis Desktop Manager连不上服务器的redis; Java 死锁; 泛型; 事务; servlet; Spring事务; 集合; 集合的分类; java8新特性; 常见的注解实例

时间:2022-11-04 22:03:41浏览次数:44  
标签:事务 java 类型 死锁 集合 图书


Redis Desktop Manager连不上服务器的redis

1、首先有没有设置密码,输入的密码是否正确

2、那个IP是内网IP嘛?外网的要加SSH

总结一下
无论是连MySQL、MongoDB、还是redis
ip如果是内网ip
那么外网就要加SSH

计算机网络技术

死锁

不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。

危害:

1、死锁会使得进程得不到正确、预期的结果

2、死锁使得资源利用率降低

3、还会导致新的死锁

例如:如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着对A进行加锁,这样死锁就发生了。线程1永远得不到B,线程2永远得不到A, 它们也不知道发生了什么,为了得到彼此的对象,它们将永远阻塞下去。

经典案例:每个人都有一个筷子,互相不给,形成不了一双

死锁:不会出异常和提示

只是所有的线程都处于阻塞的状态,无法继续执行

解决办法是

专门算法、减少同步的资源定义,尽量避免嵌套同步

和解决线程安全的方式synchronize(自动)及lock锁(手动)解决线程的安全要区别开来,不是同一个概念

泛型

1、泛型是什么?为什么要用?

把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型

参数化类型:

把类型当作是参数一样传递

<数据类型> 只能是引用类型

为什么要用泛型?

没有泛型的时候,任何类型都可以添加到集合中,造成类型的不安全。String 类型对象读取出来的对象需要强转:繁琐 可能有ClassCastException

有了泛型以后:

代码更加简洁【不用强制转换】

程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】

可读性和稳定性【在编写集合的时候,就限定了类型】

2、泛型的类型有哪些?T、<>比较常见

E - Element (在集合中使用,因为集合中存放的是元素)

T - Type(Java 类) K - Key(键)

V - Value(值) N - Number(数值类型)

?- 表示不确定的java类型-------》通配符 S、U、V - 2nd、3rd、4th types

事务

1、应用场景

转账,支付和收款金额的一致性!不能出错

用一个简单例子说明:银行转帐业务,账户A要将自己账户上的1000元转到B账户下面,A账户余额首先要减去1000元,然后B账户要增加1000元。假如在中间网络出现了问题,A账户减去1000元已经结束,B因为网络中断而操作失败,那么整个业务失败,必须做出控制,要求A账户转帐业务撤销。这才能保证业务的正确性,完成这个操走就需要事务,将A账户资金减少和B账户资金增加放到同一个事务里,要么全部执行成功,要么全部撤销,这样就保证了数据的安全性。

购买商品时的次数

2、事务定义

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

3、事务四大特性

原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。

转账和收款同时成功,或者同时失败,如果一方成功,一方失败会引起金融界的恐慌。

一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。(实例:转账,两个账户余额相加,值不变。)

原子性、隔离性、持久性都是为了实现一致性

A余额是0,A还转1000给B,事务的一致性不会让这样的操作成功的

隔离性(isolation):一个事务的执行不能被其他事务所影响。

相互独立,互不影响

持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

转账是一个永久的事,不能出现今天A转账给B,一年后转账说交易失败,这样也会引起大家的恐慌。

servlet

servlet

查询

页面

-------》BookServlet程序

1、查询全部图书

2、保存到Request域中

3、请求转发到pages/manager/manager.jsp页面

-----》pages/manager/manager.jsp

显示所有图书信息

1、从Request域中获取全部图书信息

2、使用JSTL标签库遍历输出

那是因为jsp无法直接访问数据库,所以通过Servlet来访问数据库

添加

在jsp添加页面输入数据后

-----》BookServlet程序

1、获取请求的参数,封装成Book对象

2、调用BookService.addBook()保存图书

3、跳到图书列表页面

/manager/bookServlet?action=list

刷新数据,显示添加的图书

删除

1、获取请求的参数id,图书信息

2、调用bookService.deleteBookById();

3、重定向回到图书列表管理页面

/book/manager/bookServlet?action=list

修改

图书列表中jsp页面

—》点击【修改】跳转方向路径是:manger/bookServlet?action=getBook&id=图书编号

—》BookServlet程序

getBook() 获取要修改的图书信息

1、获取图书编号

2、调用BookService.queryBookById(id):Book:得到修改图书信息

3、把图书保存在Request域中

4、请求转发到/pages/manager/book_edit.jsp页面中

update() 保存修改图书的操作

1、获取请求的参数==封装成为Book对象

2、调用BookService.updateBook(book);修改图书

3、重定向回到图书列表管理页面

地址:/工程名/manage/bookServlet?action=list

----》把修改的图书信息,带到表单中,去显示

到回页面

Spring事务

3.1.1 xml事务

<!--平台事务管理器-->

<bean id="transactionoManager1"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource1"></property>

</bean>



<!--事务增强、通知配置-->

<tx:advice id="txAdvice1" transaction-manager="transactionoManager1">

<tx:attributes>

<tx:method name="*"/>

</tx:attributes>

</tx:advice>



<!--事务aop增强 织入-->

<aop:config>

<aop:pointcut id="myPointcut1" expression="execution(*

com.study.service.Impl.*.*(..))"/>

<aop:advisor advice-ref="txAdvice1" pointcut-ref="myPointcut1"></aop:advisor>

</aop:config>

3.1.2 注解声明式配置

1.平台事务管理器配置(xml方式)

2、事务通知的配置(@Transactional注解配置)

//属性可选,可以省略不写

@Transactional(value = "transactionoManager1",isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)

3、事务注解驱动的配置<tx:annotation-driven/>

<!--事务注解驱动-->

<tx:annotation-driven/>

Integer类型与Date类型错误设置不等于空字符串,判定不等于空字符串

Redis Desktop Manager连不上服务器的redis; Java 死锁; 泛型; 事务; servlet; Spring事务; 集合; 集合的分类; java8新特性; 常见的注解实例_redis


!=‘‘的前提要用字符串去判定,如何不是,会报错的!

Integer类型与Date类型不要设置!=‘‘,判定不等于空字符串

### Error querying database.  Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
at sun.reflect.GeneratedMethodAccessor298.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
... 71 common frames omitted

集合

1、集合是什么?为什么要用集合?集合解决了什么问题?

Java集合类存放在java.util包中,是一个用来存放对象的Java容器。集合和数组一样,都是对于多个数据进行存储操作的结构。

数组不挺好用的么,为什么还要用集合呢??

数组长度是固定的,只能存放同一类型的数据!!!

如果随着代码的复杂性越高,想要改变长度类型怎么办?!

数组的添加、删除、插入数据等操作不好用,效率不高

过去数组中实际的元素个数需要实现不了。

这时产生了集合

1 集合只能存放对象,对对象的引用,还可以存放不同类型,不限数量

2 数组只能有序、元素可重复对吧!集合都可以的!

HashSet是无序的,不可重复的

集合的分类

Collection接口:单列集合====一个一个对象

list接口:有序、可重复的数据 —》相当于动态的数组

ArrayList、LinkedList、Vector

set接口:无序、不可重复

HashSet、LinkedHashSet、TreeSet

Map接口:双列集合:用来存储一对(key-value)一对的数据

HashMap、LinkedHashMap、TreeMap、Hashtable、Properties

java8新特性

java8新特性 速度更快

代码更少

强大的Stream API

便于并行

最大化减少空指针的异常Optional

Nashom引擎,允许在JVM上运行JS应用

2、Lambda表达式

Lambda是一个匿名函数

格式为

(parameters) -> expression 或 (parameters) ->{ statements; }

Lambda操作符也称为箭头操作符

左边是lambda形参列表,其实就是接口中的抽象方法的形参列表

右边是lambda体,就是重写抽象方法的方法体

3、Java8新特性

Stream API 和 Lambda表达式为新特性重要的一个改变

Stream API对集合数据进行操作,类似使用SQL执行的数据库查询。

常见的注解实例

常见的注解实例

@Override:验证重写父类的方法,没有重写则报错

@Deprecated : 过时了,idea通常会用横线划掉

@SuppressWarnings:Eclipse某个值没有使用,黄色警告处理


标签:事务,java,类型,死锁,集合,图书
From: https://blog.51cto.com/u_14604401/5824836

相关文章

  • Spring事务简介
    1、事务作用:在数据层保证一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败2、例子:模拟银行账户间转账业务  步骤......
  • 集合
    集合1.集合的理解和好处数组长度开始时必须指定,而且一旦指定,不能更改;保存的必须为同一类型的元素使用数组进行增加元素的示意代码-----比较麻烦集......
  • 分布式事务的性能设计
    分布式事务的性能设计,主要包含吞吐量和相应延迟两方面。分布式事务更适合对吞吐量要求高,对相应延迟要求不苛刻的应用。性能设计有三个层面,分别为代码优化层、算法逻辑层以及......
  • 深入理解 Spring 事务原理
    Spring事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤......
  • Spring 源码(七)Spring 事务源码解析
    注册后置处理器开启对事务的支持@EnableTransactionManagement​​@EnableTransactionManagement​​注解的主要作用是开启对事务的支持,源码如下:@Target(ElementType.TYPE)@......
  • 使用MyBatis时需要注意到的事情------执行添加操作时,一定要记得提交事务
    今天在重写添加操作代码时,发现自己写的代码没有任何报错,使用断点进行查询,发现一切正常,但是注册使用的数据就是无法添加到数据库里面然后就去之前看过的视频里面去找错误,就......
  • Java集合精选常见面试题
    前言博主只是这篇文章的搬运工,为了加强记忆自己梳理了一遍并扩展了部分内容。集合拓展链接:集合概述&集合之Collection接口-至安-博客园(cnblogs.com)Java集合概览......
  • java实现分布式事务的三种方案
    原子性:执行单元中的操作要么全部执行成功,要么全部失败。如果有一部分成功一部分失败那么成功的操作要全部回滚到执行前的状态。一致性:执行一次事务会使用数据从一个正确的......
  • spring jdbcTemplate 事务,各种诡异,包你醍醐灌顶!
    前言项目框架主要是spring,持久层框架没有用mybtis,用的是spring的jdbc;业务需求:给应用添加领域(一个领域包含多个应用,一个应用可能属于多个领域,一般而言一个应用只属......
  • Java高级架构师-Java基础(集合)
    Java高级架构师-Java基础(集合)集合框架Java.util.CollectionCollection接口中的共性功能1.添加boobleanadd(Objectobj);往该集合中添加元素,一次添加一个bo......