spring cache +redis与直接用redis有什么不同么?

spring cache 不也是缓存么,为什么不直接用redis呢,spring cache redis集成这样子有什么好处呢?

7个回答

集群环境下,每台服务器的spring cache是不同步的,这样会出问题的,spring cache只适合单机环境
redis是设置单独的缓存服务器,所有集群服务器统一访问redis,不会出现缓存不同步的情况

spring cache是很早就有的东西,现在+redis是为了顺应时代,更好的兼容集群环境,加强保留spring cache功能,不如直接使用redis

Spring cache是代码级的缓存,他一般是使用一个ConcurrentMap。也就是说实际上还是是使用JVM的内存来缓存对象的,
那么肯定会造成大量的内存消耗。但是使用方便。

Redis 作为一个缓存服务器,是内存级的缓存。它是使用单纯的内存来进行缓存。

那么Spring cache +redis的好处显而易见了。既可以很方便的缓存对象,同时用来缓存的内存的是使用redis的内存,
不会消耗JVM的内存,提升了性能。

当然这里Redis不是必须的,换成其他的缓存服务器一样可以,只要实现Spring的Cache类,并配置到XML里面就行了。

spring cache 是spring实现的java代码级的缓存,类似于ehcache。
但是spring cache 没有对集群进行支持,ehcache支持集群。

spring cache在单机上性能表现好一些;之所以使用spring cache 结合redis使用 一般是为了提高性能,优化实现流程。把一些系统配置级的东西用spring cache实现比较好一些。

毕竟redis 从2.8后才对集群支持好一点。

当然,我还是比较推荐现在的redis。具体项目具体分析实现。

redis的集群比较好,缓存为键值对的形式,并且redis是内存型数据库,所以redis的效率在一定程度上是比cache高的,(小白见解)

redis主要是实现分布式缓存
spring cache 不是

spring cache 是基于注解的,对代码侵入比较小,但是支持的api太少了,不能满足大部分业务需求。
redis基于api,优点是api类型多,缺点是业务代码入侵

还有就是楼上说的spring cache是单机,不适合分布式

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
spring cache +redis与直接用redis有什么不同么?
spring cache 不也是缓存么,为什么不直接用redis呢,spring cache redis集成这样子有什么好处呢?
实际项目中有没有使用spring自带的Spring Cache而不另外集成ehcache和redis?望告知
**前提我要开发的这个系统,不集群。** 最近使用springboot开发一个系统,准备使用缓存 经过了解,学习了Spring Cache,并做了一个例子,体验了一下缓存。感觉还可以。但在网上查一般是集成第三方中间件如ehcache和redis,两个使用场景不一样,一个是类似单机版的缓存,缓存共享麻烦,集群分布式应用不方便不好做分布式。如果分布式一般用redis,不集群用ehcache。这是我初步了解了的信息。 **我想问的是:** 有没有朋友开发过一些系统,不用第三方缓存,就用springCache做缓存的,这样性能怎么样,可不可以这样使用,而一般到什么程度就得用第三方缓存如:ehcache。
Spring Boot 使用Redis缓存 配置问题
# 背景 我想要在当前的Spring Boot项目中使用Redis作为缓存。目前所了解到的内容是Redis缓存有两种实现方式,一种是使用Spring Cache注解,需要加一个配置文件,另一种是使用RedisTemplate,想要两种方式混合使用。 # 相关版本 Spring Boot:Spring Boot 2.0.0.M7 Redis依赖包: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` # 主要问题: application中yml文件我按照书上和官方文档的推荐方式在Application.yml里面做了如下配置,因为我使用的Spring Boot版本比较新,因为配置方式与之前的稍微有点不一样: ``` spring: redis: host: 127.0.0.1 port: 6379 password: 123456 #timeout: 0 #Spring Boot 2.0.0.M7中原有的redis配置方法过时,加了一层jedis jedis: pool: max-active: 8 max-wait: -1 min-idle: 8 max-idle: 0 ``` 而为了使用Spring Cache注解,需要启用注解并且设置数据在Redis数据库的有效期限,需要如下配置: ![图片说明](https://img-ask.csdn.net/upload/201802/22/1519271575_371074.png) 无论是我看的书籍还是查阅的很多博客都是这种配置方式,但是如图报错了。我猜想很大可能是版本原因,因此去查看了Spring提供的官方文档(2.0.0.M1的文档,是最新的文档): https://docs.spring.io/spring-data/redis/docs/2.1.0.M1/api/ 里面的RedisCacheManager的构造方法显然没有上面图片中的那种,文档所提供的的构造方法我有看不太懂应该怎么获取或者使用。 因为第一次配置我了解的相关知识也比较少,希望有大神能够指导一下在这里具体应该怎么配置Redis数据的过期时间? 感谢阅读问题~
spring下使用redis的问题!!!
``` @Cacheable("wantToCache") public List<Cache> wantToCache(String type) { List<Cache> caches1 = redisUtil.getCacheList("wantToCache" + type); if (caches1 != null) { return caches1; } System.out.println("=================="); Condition condition = new Condition(Cache.class); List<Cache> Caches = casheDao.selectByCondition(condition); switch (type) { case 1: redisUtil.setCacheList("wantToCache" + type, Caches); } return Caches; } ``` 实际上就是比如说我要对一个service做缓存,查询一个表。这个表可能有很多种type。 但是如果直接用@Cacheable注解,redis相当于没有起作用,每次请求不同的type,它都会去更新值,只好自己手动为cache分类,可是这样特别没有效率,请问有没有什么折中的办法呢? 我现在这个办法只是一个很逗很逗的的做法,有没有什么做法,可以让它用很少的代码量,实现一个service,不同查询,只存一次。 而不是查一次更新一次key?
spring data redis + redis cluster性能问题咨询
有个需求:可以根据汉字、拼音首字母、拼音进行实时检索; redis里我按照这种格式进行存储: 第一组: key:ackey-cache:ORG_TREE:3400000000001000000000:安徽省信访局:ahsxfj:anhuishengxinfangju value:tree-cache:ORG_TREE:3400000000001000000000:3400000000000000000000 第二组:将第一组的vaule作为key, key:tree-cache:ORG_TREE:3400000000001000000000:3400000000000000000000 value:{dm:3400000,mc:''安徽省合肥市信访局} 尝试结果: 1.redis单节点,按照合肥市信访查询,即ackey-cache:ORG_TREE:*合肥市信访*,几号秒就出来了,然后再根据结果再去查单位,总共也不过20ms; 2.redis集群,接近2s钟,远远比不上单节点redis 求解决方案
Spring Cache使用Redis缓存服务器,怎么指定KEY的有效期
请大神指点,Spring3.2.17版本框架,在使用Spring Cache的时候,怎么实现可自定义本次缓存KEY的有效期,因为业务不同,需要设置的有效期也不一样: @Cacheable(value="logCache",key="#root.methodName + #exceptionLogBean.logid") public ExceptionLogBean getLogInfo(ExceptionLogBean exceptionLogBean){ return exceptionLogService.selectLogByLogid(exceptionLogBean); }
spring整合redis key的序列化问题
\xAC\xED\x00\x05t\x00保存的key都带这串东西。根据博文http://blog.csdn.net/yunhaibin/article/details/9001198 配置了也不行,各位能指点一下吗 <!-- spring.xml--> <cache:annotation-driven cache-manager="cacheManager"/> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean class="com.security.cache.SimpleCache"> <property name="redisTemplate" ref="redisTemplate" /> <property name="name" value="commonService.selectAll" /> <property name="timeout" value="${redis.timeout}" /> </bean> </set> </property> </bean> <!-- redis.xml--> <bean id="propertyConfigur" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:redis.properties</value> <value>classpath:shiro_db.properties</value> </list> </property> </bean> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" p:maxTotal="${redis.maxActive}" p:testOnBorrow="${redis.testOnBorrow}" p:MaxWaitMillis="${redis.maxWait}" p:maxIdle="${redis.maxIdle}"/> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="poolConfig" /> <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" /> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="connectionFactory" p:defaultSerializer-ref="stringRedisSerializer" p:keySerializer-ref="stringRedisSerializer">
Redis新手。cache配置类问题
The constructor RedisCacheManager(RedisTemplate) is undefined redis新手。第一次用。项目是Springboot ``` import java.lang.reflect.Method; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport{ @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } @SuppressWarnings("rawtypes") @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { //问题在这里 RedisCacheManager rcm = new RedisCacheManager(redisTemplate); rcm.setDefaultExpiration(60);//秒 return rcm; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } } ``` 是包引错了么。还是这个写法不对。 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version> </dependency> ```
spring-data-redis使用cluster失败
错误信息如下: Caused by: org.springframework.data.redis.RedisConnectionFailureException: Could not get a resource from the pool; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 代码如下: RedisClusterConfig.class ``` @Configuration public class RedisClusterConfig { @Bean RedisClusterConfiguration redisClusterConfiguration(){ List<String> nodes = new ArrayList<>(); nodes.add("192.168.145.141:7001");nodes.add("192.168.145.141:7002");nodes.add("192.168.145.141:7003"); nodes.add("192.168.145.141:7004");nodes.add("192.168.145.141:7005");nodes.add("192.168.145.141:7006"); RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(nodes); return redisClusterConfiguration; } @Bean("redisConnectionFactory") JedisConnectionFactory redisConnectionFactory(){ JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration()); return jedisConnectionFactory; } @Bean("redisCacheManager") public RedisCacheManager redisCacheManager() { return RedisCacheManager.create(redisConnectionFactory()); } } ``` DemoApplication.class ``` @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean public CommandLineRunner commandLineRunner(ApplicationContext ctx) { return args -> { System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } RedisConnectionFactory redisConnectionFactory = (RedisConnectionFactory)ctx.getBean("redisConnectionFactory"); RedisCacheManager redisCacheManager = (RedisCacheManager)ctx.getBean("redisCacheManager"); Cache cache = redisCacheManager.getCache("abc"); if(cache != null){ cache.put("13",13); String a = cache.get("13").toString(); System.out.println("a is " + a); }else { System.out.println("can not find cache"); } }; } } ``` 我调试发现配置有问题: ![图片说明](https://img-ask.csdn.net/upload/201903/01/1551404050_866176.png) pom信息如下: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.1.3.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> </dependencies> ```
spring+springMVC+mybatis+redis的整合(注解方式)可以返回数据,但是不能缓存到redis中的问题?
1:spring的核心配置文件 ``` <context:property-placeholder location="classpath:config.properties,classpath:config/redis.properties" /> <!-- 创建一个jedis并设置 IP、port、password--> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <!-- <property name="poolConfig" ref="poolConfig"/> --> <property name="hostName" value="${redis.url}"/> <property name="port" value="${redis.port}"/> <property name="password" value="${redis.auth}"/> <property name="database" value="${redis.dbIndex}"/> <!-- <property name="timeout" value="20000" ></property> --> </bean> <!-- redis 序列化策略 ,通常情况下key值采用String序列化策略, --> <!-- 如果不指定序列化策略,StringRedisTemplate的key和value都将采用String序列化策略; --> <!-- 但是RedisTemplate的key和value都将采用JDK序列化 这样就会出现采用不同template保存的数据不能用同一个template删除的问题 --> <bean id="stringSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/> <bean id="jdkSerializerRedis" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" > <property name="connectionFactory" ref="jedisConnectionFactory" /> <property name="keySerializer" ref="stringSerializer"/> <!-- key使用String序列化方式 --> <property name="valueSerializer" ref="stringSerializer"/><!-- value使用jdk序列化方式 --> </bean > <!-- 配置RedisCacheManager --> <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> <constructor-arg name="redisOperations" ref="redisTemplate"/> <property name="defaultExpiration" value="${redis.expiration}"/> </bean> <aop:aspectj-autoproxy proxy-target-class="true"/> ``` 2:注解 ``` @Cacheable(value ="user") @RequestMapping("allmapper/") @ResponseBody public List<User> allmapper(){ List<User> selectAllExpertList = mapperService.selectExpertMapper(); return selectAllExpertList; } ``` 3:实体类 我给实体类实现了序列化接口 4:结果:我能返回数据,但是不能把返回的数据放入redis中。有哪位大佬遇见过这种情况的,接小老弟讲解讲解呗!
当SpringBootCache同时引入了Ehcache和Redis后,方法的缓存到底是使用谁的或者如何区分
在pom同时引入cache, ehcache,redis 后 ![图片说明](https://img-ask.csdn.net/upload/202003/09/1583738822_87579.png) 这些缓存注解操作的是 redis还是ehcache ? 或者怎么去设置让它使用redis还是
hibernate整合redis二级缓存问题
背景: 有一老项目采用的hibernate配合ehcache作为二级缓存,现因需求需要更换redis来做hibernate的二级缓存。大家不用问为什么不换掉hibernate,因为是老项目所以风险太大。 问题: 1、我按照网上做法导入了若干个jar包,见图: ![图片说明](https://img-ask.csdn.net/upload/201809/12/1536736237_134115.jpg) 2、spring中sessionFactory也配置了二级缓存: ``` hibernate.cache.use_query_cache = true hibernate.cache.use_second_level_cache = true hibernate.cache.use_structured_entries = true hibernate.cache.region_prefix = hibernate hibernate.cache.region.factory_class = org.hibernate.cache.redis.hibernate5.RedisRegionFactory hibernate.cache.provider_configuration_file_resource_path = hibernate-redis.properties ``` 3、也分别创建了hibernate-redis.properties和redisson.yaml,内容分别如下 (1)hibernate-redis.properties: ``` redisson-config = classpath:redisson.yaml redis.expiryInSeconds.default = 360 redis.expiryInSeconds.hibernate.common = 0 redis.expiryInSeconds.hibernate.account = 1200 ``` (2)redisson.yaml ``` singleServerConfig: idleConnectionTimeout: 10000 pingTimeout: 5000 connectTimeout: 5000 timeout: 5000 retryAttempts: 1 retryInterval: 1000 reconnectionTimeout: 3000 failedAttempts: 1 password: 123456 subscriptionsPerConnection: 3 clientName: null address: [ "redis://127.0.0.1:6379" ] subscriptionConnectionMinimumIdleSize: 1 subscriptionConnectionPoolSize: 3 connectionMinimumIdleSize: 3 connectionPoolSize: 3 database: 0 dnsMonitoring: false dnsMonitoringInterval: 5000 threads: 0 codec: !<org.redisson.codec.SnappyCodec> {} useLinuxNativeEpoll: false eventLoopGroup: null ``` 4、redis也正常运行 5、最后运行程序报了一个错: ``` Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.net.URI` out of START_ARRAY token at [Source: (URL); line: 14, column: 4] (through reference chain: org.redisson.config.Config["singleServerConfig"]->org.redisson.config.SingleServerConfig["address"]) at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63) at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1342) at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1138) at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromArray(StdDeserializer.java:674) at com.fasterxml.jackson.databind.deser.std.FromStringDeserializer.deserialize(FromStringDeserializer.java:164) at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:136) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:127) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2959) at org.redisson.config.ConfigSupport.fromYAML(ConfigSupport.java:169) at org.redisson.config.Config.fromYAML(Config.java:754) at org.hibernate.cache.redis.client.RedisClientFactory.createRedisClient(RedisClientFactory.java:63) ... 57 more ``` 不知道怎么解决了,希望有相关经验的大神能助我解惑。
spring+mybatis+redis 开启缓存后出现MybatisSystemException
错误提示: ![图片说明](https://img-ask.csdn.net/upload/201608/04/1470284884_917134.png) Mapper.xml ![图片说明](https://img-ask.csdn.net/upload/201608/04/1470284833_211539.png) spring-mybatis.xml: ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描 --> <context:component-scan base-package="com.yc.mybank" /> <context:annotation-config></context:annotation-config> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <!-- 抽象bean,在這里配置所有的通用 otomikos聯接池配置屬性 --> <bean id="abstractXADataSource" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean" init-method="init" destroy-method="close" abstract="true"> <property name="poolSize" value="3" /> <property name="minPoolSize" value="1" /> <property name="maxPoolSize" value="10" /> <property name="borrowConnectionTimeout" value="60" /> <property name="reapTimeout" value="20" /> <!-- 最大空闲时间 --> <property name="maxIdleTime" value="60" /> <property name="maintenanceInterval" value="60" /> <property name="loginTimeout" value="60" /> </bean> <bean id="OdataSource" parent="abstractXADataSource"> <!-- value只要两个数据源不同就行,随便取名 --> <property name="uniqueResourceName" value="oracle/db" /> <property name="user"> <value>${uname}</value> </property> <property name="password"> <value>${pwd}</value> </property> <property name="url"> <value>${url}</value> </property> <property name="driverClassName"> <value>${driverName}</value> </property> </bean> <bean id="SdataSource" parent="abstractXADataSource"> <!-- value只要两个数据源不同就行,随便取名 --> <property name="uniqueResourceName" value="mysql" /> <property name="user"> <value>${mysql.uname}</value> </property> <property name="password"> <value>${mysql.pwd}</value> </property> <property name="url"> <value>${mysql.url}</value> </property> <property name="driverClassName"> <value>${mysql.driverName}</value> </property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="OdataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/yc/mybank/mapper/userMapper.xml"></property> <property name="configurationProperties"> <props> <prop key="cacheEnabled">true</prop> <prop key="lazyLoadingEnabled">false</prop> <prop key="aggressiveLazyLoading">true</prop> </props> </property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="SdataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/yc/mybank/mapper/userMapper.xml"></property> <property name="configurationProperties"> <props> <prop key="cacheEnabled">true</prop> <prop key="lazyLoadingEnabled">false</prop> <prop key="aggressiveLazyLoading">true</prop> </props> </property> </bean> <!-- 创建sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <!-- 只能通过 构造方法注入 sqlSessionFactory --> <constructor-arg ref="sqlSessionFactory"></constructor-arg> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.yc.mybank.mapper" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> </beans> ``` 单元测试类代码: ``` package mybank_springMVC; import javax.annotation.Resource; import org.junit.Before; import org.junit.runner.RunWith; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.yc.mybank.bean.BankAccount; import com.yc.mybank.biz.UserBiz; import com.yc.mybank.dao.UserDao; import com.yc.mybank.dao.cache.RedisCache; import com.yc.mybank.dao.cache.RedisPool; @RunWith(SpringJUnit4ClassRunner.class) //表示继承了SpringJUnit4ClassRunner类 @ContextConfiguration(locations = {"classpath:spring-mybatis.xml"}) public class Test { @Resource private UserBiz userBiz; @Resource private SqlSessionTemplate session; @Resource private UserDao userDao; @org.junit.Test public void testSqlsession(){ //System.out.println(userBiz); //System.out.println(session); //System.out.println(userDao); System.out.println(RedisCache.createRedis()); //System.out.println(RedisCache.createRedis()); System.out.println(userBiz.getUser(3)); //ApplicationContext ac=new ClassPathXmlApplicationContext("spring-mybatis.xml"); //System.err.println(ac.getBean("userDao")); } } ``` Redis代码: ``` package com.yc.mybank.dao.cache; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ibatis.cache.Cache; import com.sun.org.apache.xml.internal.utils.SerializableLocatorImpl; import com.yc.mybank.util.SerializableUtil; import redis.clients.jedis.Jedis; public class RedisCache implements Cache { private String id; private Jedis jedisClient; //同步锁 private ReadWriteLock readWriteLock=new ReentrantReadWriteLock(); public RedisCache(String id) { if(id==null){ throw new RuntimeException("cache instance required an ID"); } this.jedisClient=createRedis(); this.id=id; } /** * 将缓存中的数据删掉 */ public void clear() { // TODO Auto-generated method stub this.jedisClient.flushDB(); } public String getId() { // TODO Auto-generated method stub return id; } /** * 通过key到缓存中取值 */ public Object getObject(Object key) { // TODO Auto-generated method stub byte[] valueBytes=SerializableUtil.serialize(key); Object obj=SerializableUtil.unserializable(valueBytes); return obj; } public static Jedis createRedis(){ Jedis jedis=RedisPool.getPool().getResource(); return jedis; } /** * 同步锁 */ public ReadWriteLock getReadWriteLock() { // TODO Auto-generated method stub return readWriteLock; } public int getSize() { Long size=this.jedisClient.dbSize(); int re=Integer.valueOf(size+""); return re; } public void putObject(Object key, Object value) { // TODO Auto-generated method stub byte[] keyByte=SerializableUtil.serialize(key); byte[] valueByte=SerializableUtil.serialize(value); this.jedisClient.set(keyByte, valueByte); } public Object removeObject(Object key) { byte[] keyByte=SerializableUtil.serialize(key); return this.jedisClient.expire(keyByte,0); } } ``` redis测试通过没问题,能取得到,在不开启缓存的情况下业务能进行
Spring RedisCacheManager 用java代码获取缓存
``` <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> <constructor-arg name="redisOperations" ref="redisTemplate" /> </bean> ``` 我配置了Redis作为缓存,集成在Spring中,目前的做法是直接在需要缓存的方法名上加@Cacheable(value = "xxx")实现缓存。 但我还有另外一个需求,就是在redis中存放登陆的用户。那这样在方法名上增加注解实现不了。需要直接用java代码添加及获取缓存。 我看了下RedisCacheManager的数据结构,但还是分析不出来怎么做。
Cannot find cache named '方法名' for Builder
使用Spring-data-redis、mybatis搭建项目,出现下图的错误 Cannot find cache named 'findMemberById' for Builder[public abstract com.pmclub.pojo.Member com.pmclub.mapper.MemberMapper.findMemberById(java.lang.Integer)] caches=[findMemberById] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'![](https://static.oschina.net/uploads/space/2017/0418/220430_IGoC_2763414.png) ![](https://static.oschina.net/uploads/space/2017/0418/220447_7JJ0_2763414.png)
HttpServletRequest request .getSession() 报错,报错内容是获取不到Redis连接
HttpServletRequest request .getSession() 报错,报错内容是获取不到Redis连接,但是操作Redis没有任何问题。(框架是Spring + SpringMVC) 报错语句,如图 ![图片说明](https://img-ask.csdn.net/upload/201909/11/1568170120_204317.png) 报错详情,如图 ![图片说明](https://img-ask.csdn.net/upload/201909/11/1568170222_638268.png) 报错内容: java.util.NoSuchElementException: Unable to validate object [redis.clients.jedis.util.Pool.getResource(Pool.java:53), redis.clients.jedis.JedisPool.getResource(JedisPool.java:234), redis.clients.jedis.JedisPool.getResource(JedisPool.java:15), tomcat.request.session.data.cache.impl.redis.RedisManager.setnx(RedisManager.java:51), tomcat.request.session.data.cache.impl.redis.RedisCache.setnx(RedisCache.java:36), tomcat.request.session.redis.SessionManager.createSession(SessionManager.java:100), tomcat.request.session.redis.SessionManager.createSession(SessionManager.java:28), org.apache.catalina.connector.Request.doGetSession(Request.java:2981), org.apache.catalina.connector.Request.getSession(Request.java:2374), org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:908), sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method), sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62), sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), java.lang.reflect.Method.invoke(Method.java:498), org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler.invoke(AutowireUtils.java:307), com.sun.proxy.$Proxy105.getSession(Unknown Source), com.dsh.live.login.controller.LoginController.userLogin(LoginController.java:64), sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method), sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62), sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), java.lang.reflect.Method.invoke(Method.java:498), org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222), org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137), org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110), org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814), org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737), org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85), org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959), org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893), org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969), org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:871), javax.servlet.http.HttpServlet.service(HttpServlet.java:660), org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845), javax.servlet.http.HttpServlet.service(HttpServlet.java:741), org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231), org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166), org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53), org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193), org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166), org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121), org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107), org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193), org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166), org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199), org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96), tomcat.request.session.redis.SessionHandlerValve.invoke(SessionHandlerValve.java:29), org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137), org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81), org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651), org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87), org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342), org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:409), org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66), org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754), org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376), org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49), java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142), java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617), org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61), java.lang.Thread.run(Thread.java:745)]
在pom中加入redis依赖
报错信息 The requested profile "pom.xml" could not be activated because it does not exist. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0:test (default-test) on project springboot007: There are test failures. [ERROR] [ERROR] Please refer to D:\springboot\springboot007\target\surefire-reports for the individual test results. [ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream. [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 在pom中加入了这个依赖,启动时就报错了,新手求解 <!-- cache --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
spring data jpa, 分页查询加缓存时,PageImpl 无法反序列化
由于想给 findAll(Pageable pageable)加上spring的缓存(spring cache),第一遍查询正常,但是在第二遍以后,从缓存中读取时,无法反序列化,提示没有无参构造,请问这个有解决办法吗? 如下: ``` @CacheConfig(cacheNames = {"familyUserDao"}) public interface FamilyUserDao extends JpaRepository<FamilyUser,Long> { @Override @Cacheable(key = "methodName +#p0") Page<FamilyUser> findAll(Pageable pageable); } ``` 调用 : ``` Page<FamilyUser> familyUserPage = familyUserDao.findAll(pageable); ``` 时,报: ``` org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Can not construct instance of org.springframework.data.domain.PageImpl: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) at [Source: [B@7fae8571; line: 1, column: 46]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.springframework.data.domain.PageImpl: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) at [Source: [B@7fae8571; line: 1, column: 46] at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.deserialize(Jackson2JsonRedisSerializer.java:73), ``` 这里其实是反序列化问题,jpa默认是使用PageImpl实现Page, 但是PageImpl并没有无参构造,如下: ![图片说明](https://note.youdao.com/yws/public/resource/e8cf7ca9b693dbbe59987b3554dda9bc/xmlnote/E61AE48907DD480095638F457398768E/13024) 有办法完美解决吗? 没有C币,一是分享问题,二是只能乞求大家看看有没有好办法啦,多谢啦
Springboot2.2.2不能连接数据库
1.写一个体验redis缓存的demo,不能连接数据库。 导入其他人的项目可以,连接自己的数据库,可以连接成功。确定数据库连接信息没有写错。参考网上,修改mysql-connector-java的版本也没有用。 系统环境:java-1.8; mysql-5.1.62; IDEA 2019-1.4;SpringBoot 2.2.2; 2.pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>cache</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cache</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 3.配置文件 ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578275877_830078.png) 4.报错信息 ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578276565_257380.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578275918_258494.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578275931_720085.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578275953_50439.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578275966_288013.png)
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
立即提问