面试中 spring的AOP、IOC、DI该如何解答

1.希望不要照搬网上的答案,有自己的认知与总结
2.最好简洁明了但是要说的稍微深入些,因为是在口头说话,太简单会觉得在敷衍
3.最好举例子说到用在什么地方的,能一听就知道作用

14个回答

总的来说:
ioc就是控制翻转或是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象。
aop就是面向切面的编程。比如说你每做一次对数据库操作,都要生成一句日志。如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法。但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作。
通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。
具体还是得根据个人的理解去学习。

AOP 官方的解释是面向切面编程,实际上 AOP 的应用是指在不改动源代码的情况下,灵活添加业务逻辑实现.
IOC 比较好理解,就是对象的控制器交出去给 spring 来管理.大幅降低代码之间的耦合度.
DI 就是将spring管理的对象通过 AutoWrite 注解注入到我们需要的地方.注入过来的对象是由spring管理的.

AOP:面向切面编程,动态封装一些可重用(与业务无关)的代码;
IOC: 控制反转,DI:依赖注入,这两者其实是同一概念,具体的讲:在某个地方需要一个对象的时候,在传统的程序设计过程中,通常由调用者来创建一个对象的。但在spring中,创建对象的工作不再由调用者来完成,因此称为控制反转。创建对象的工作由spring来完成,然后注入调用者,因此也称为依赖注入。

IOC控制反转,就是将xml文件配置的bean利用反射实例化对象,DI依赖注入可以通过构造器注入和setter注入,aop在切入点实现指定2功能

AOP: 举个例子: 比如一个项目中存在N多个save()方法, 如果,现在项目有一个需求,比如在保存完成之前后者之后,需要记录日志操作,如果不用AOP,你需要找到每个类里面的
save方法,然后添加响应的代码,费时费力并且后期也不好维护,如果引用AOP技术,只需要自定义一个方法,在spring配置文件中将该方法配置好,当每次调用完原先的save方法时,都会去执行你写的保存日志方法。
IOC:这个顾名思义就是将对象的创建交给容器,例如:A类中调用B类的方法,我们会在A类中new B()类对象,这样A类和B类的耦合程度较高,不便于解耦,因而IOC派上用场了,在A类中如果我们要调用B类中的方法,B类的对象我们可以使用@RESOURCE注解等方式注入进来,然后在A类中直接使用该对象调用响应的B类方法,从而达到了解耦的目的。
DI:依赖注入,列举常用的方式,一个WEB项目中,前端JSP的页面中的form表单,例如学生的相关信息,我们只需要将学生表生成实体,提供set(),get()方法,jsp页面的input标签name属性指定和bean中定义的变量一样,发送请求,后台方法就可以直接用该实体进行接收,这就是以一种DI。

可以打个比喻,编程来源生活,这样你记得会比较清而且会比较深刻

按你的理解去回答,如果你真的学的还可以,这个问题应该不是很难,要是答不出来,建议还是好好学一下

IOC:控制翻转,需要的时候直接从容器中取,而不管容器是怎么给你的
AOP:面向切面的编程,底层原理是动态代理

aop你可以举一些列子比如事物,还有格式转化,日期转化之类的
ioc和di就是两个相反方向的,比如我控制你,反过来就是你被我控制.

下载一份面试宝典看看

共14条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
spring ioc 与 aop 关系
请问怎么理解,如果没有spring ioc,那么spring的aop是不能成立的!
Spring中:IOC是java反射的表现?AOP是java动态代理的表现?这么说对吗?
Spring中:IOC是java反射的表现?AOP是java动态代理的表现?这么说对吗?哪位能给我分析下
spring中加入AOP事务报错
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <context:component-scan base-package="com.atguigu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- Spring的配置文件,这里主要配置和业务逻辑有关的 --> <!--=================== 数据源,事务控制,xxx ================--> <context:property-placeholder location="classpath:dbconfig.properties" /> <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!--================== 配置和MyBatis的整合=============== --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 指定mybatis全局配置文件的位置 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <property name="dataSource" ref="pooledDataSource"></property> <!-- 指定mybatis,mapper文件的位置 --> <property name="mapperLocations" value="classpath:mapper/*.xml"></property> </bean> <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--扫描所有dao接口的实现,加入到ioc容器中 --> <property name="basePackage" value="com.atguigu.crud.dao"></property> </bean> <!--============================================= --> <!-- ===============事务控制的配置 ================--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--控制住数据源 --> <property name="dataSource" ref="pooledDataSource"></property> </bean> <!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式) --> <aop:config> <!-- 切入点表达式 --> <aop:pointcut expression="execution(* com.atguigu.crud.service..*(..))" id="txPoint"/> <!-- 配置事务增强 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/> </aop:config> <!--配置事务增强,事务如何切入 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 所有方法都是事务方法 --> <tx:method name="*"/> <!--以get开始的所有方法 --> <tx:method name="get*" read-only="true"/> </tx:attributes> </tx:advice> <!-- Spring配置文件的核心点(数据源、与mybatis的整合,事务控制) --> </beans>
spring中AOP切面的问题。
package com.dao; import org.springframework.stereotype.Repository; import com.imp.AopPersonImp; @Repository public class AopPersonDao implements AopPersonImp { /* (non-Javadoc) * @see com.dao.AopPersonImp#save() */ public void save(String name){ System.out.println("增加的名称:"+name); } } --------------------------------- package com.service; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.dao.AopPersonDao; @Service public class AopPersonService { @Resource private AopPersonDao aopPersonDao; public void add(String name){ aopPersonDao.save(name); } } 在AopPersonService中注入AopPersonDao。 -------------------------------------------- package com.aop; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component public class MyAopInterceptor { //"execution (* com..*.*(..))" 返回值为object(所有类型) com包下所有子包,子包下所有类,类下所有方法,方法中所有类型参数 //"execution (* com.dao.AopPersonDao.*(..))" @Pointcut("execution (* com..*.*(..))") private void pointCutMethod(){}//先申明一个切入点 @Before("pointCutMethod()") //pointCutMethod就是切入点的名称 public void doAccessCheck(){ System.out.println("前置通知."); } } -------------------------------------------------- <?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- 开启AOP切面 --> <aop:aspectj-autoproxy/> <context:component-scan base-package="com" /> </beans> ----------------------------------------------- package com.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.imp.AopPersonImp; import com.service.AopPersonService; public class SpringAopTest { @Test public void aopTest1(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("AoplicationContext.xml"); AopPersonImp api = (AopPersonImp)ctx.getBean("aopPersonDao"); api.save("张三"); } @Test public void aopTest2(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("AoplicationContext.xml"); AopPersonService aps = (AopPersonService)ctx.getBean("aopPersonService"); aps.add("张三"); } } ----------------------------------------------------- 问题:如果将AopPersonSercice中AopPersonDao依赖注入注销的话,在执行aopTest1中可以成功获取aop前置通知。 如果将AopPersonDao依赖注入到AopPersonSercice中,在执行aopTest2时会报错。下面是报错提示: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aopPersonService': Injection of resource fields failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'aopPersonDao' must be of type [com.dao.AopPersonDao], but was actually of type [$Proxy10] at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:292) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at com.test.SpringAopTest.aopTest2(SpringAopTest.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'aopPersonDao' must be of type [com.dao.AopPersonDao], but was actually of type [$Proxy10] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:435) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:409) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:537) at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:180) at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:289) ... 39 more
Spring AOP 出错,求大神解答
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManager' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut allAddMethod Caused by: java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut allAddMethod
Spring中AOP的原理?
面试问Spring中AOP的原理?用到哪些技术? 答:通过动态代理技术,然后简单说了些实现方式。 这只是其中的一种,还有其他的吗? 答:........ 求大哥们指点!
Java如何在Spring AOP中返回Map
## **Java如何在Spring AOP中返回Map** 各路Java业界大神,请帮小弟一把。 在spring mvc的控制器中,需要频繁返回Map<String,String>来反应前端网页是否修改成功。 所以我就想做一个AOP控制所有的void delete*()等方法实现自动加上Map类型返回。 以下是未修改代码: @RequestMapping("delete") @ResponseBody public Map<String,String> delete(Integer id){ Map<String,String> tipMessages=new HashMap<String,String>(); try{ xxxService.delete(Integer id); tipMessages.put("status", "Y"); tipMessages.put("info","删除成功"); }catch(Exception e){ tipMessages.put("status", "N"); tipMessages.put("info", "删除失败"); } return tipMessages; 理想状态: @Around("pointCut()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { try{ Object o = pjp.proceed(); //正常处理 tipMessages.put("status", "Y"); tipMessages.put("info","删除成功"); }catch(Exception e){ tipMessages.put("status", "N"); tipMessages.put("info", "删除失败"); } return o; } Class xxxService{ public Map<String,String> delete(){ xxxRepository.delete(); } } 不知从何下手,望大神门指点迷津。
AOP和IOC的概念以及在Spring中是如何应用?
几个框架都略略地过了一遍现在还是对:AOP和IOC的概念以及在Spring中是如何应用不是很理解,希望大家能帮帮忙。
spring的AOP实现原理是什么?
spring的AOP实现原理是什么?想了解一下,希望高手解答一下
Spring aop拦截Conreoller
现在需求是后台需要判断客户端是否登录,客户端请求参数校验。 我现在的想法是用aop拦截所有的请求,然后通过aop处理完成之后 再决定是否接给Controller处理。 例如修改用户的Contrller,有一个CommonParameter参数,有客户端的token。我需要在拦截器里面先判断这个token是不是正确的,然后不正确就直接返回客户端json了,如果准确的就给这个Controller处理。 @RequestMapping(value="/edit_user",method = RequestMethod.POST) @ResponseBody public ModelMap editUser(@ModelAttribute("common") CommonParameter common, @ModelAttribute("user") User user){ ModelMap modelMap=userService.editUser(common,user); return modelMap; } 这是我照着网上写的拦截器UserTokenInterceptor,方法有执行,但是我不知道如何拦截。 @Aspect @Component public class UserTokenInterceptor { //controller包的子包里面任何方法 @Pointcut("execution(public * com.ansen.birthday.assistant.controller.*.*(..))") public void checkToken(){ } @Before("checkToken()") public void beforeCheckToken() { System.out.println("调用方法之前。。。。"); } @AfterReturning("checkToken()") public void afterCheckToken(ProceedingJoinPoint joint) { System.out.println("调用方法结束之后。。。。"); } //抛出异常时才调用 @AfterThrowing("checkToken()") public void afterThrowing() { System.out.println("校验token出现异常了......"); } }
Spring 注解AOP 遇到IOC注解时不起作用
@Service @Lazy(false) public class BusinessManager{ }     @Component @Lazy(false) @Aspect public class TradeAspect {  @Around(value = "execution(public * BusinessManager.*(..))   public Object aroundMethod(ProceedingJoinPoint pjd, Trader anm) { }     调用时 getBean("businessManager")方式获取的对象AOP生效 (对象的cglib生成的代理类) @Autowired private BusinessManagerbusinessManager;      方式获取的对象AOP不生效             (对象不是代理类)
spring的aop是怎么样的原理?
spring的aop实现原理和运行过程,请结合代码来具体说明一下给从来没学过aop的人也能听明白,别简单的说 动态代理和反射。。。
Spring AOP的概念和应用
![图片说明](https://img-ask.csdn.net/upload/201709/23/1506148007_799353.jpg) 一直搞不明白切点和连接点的概念,和什么时候需要使用AOP,望大神指点
spring除了aop还有哪些地方是通过动态代理实现的?
spring除了aop这块功能是动态代理,还有哪些地方是通过动态代理实现的?
spring的aop中,会不会出现前后切面同时运行的情况
spring的aop中,会不会出现前后切面同时运行的情况,有没有前切面服务响应中,后切面也开始运行的情况?
类似Spring aop的设计模式还有什么
用什么设计模式可以实现类似spring 中AOP的功能,大神们指点下
spring aop编程遇到如下问题
<!-- 配置自动扫描的包 --> <context:component-scan base-package="com.test.spring.aop.impl"></context:component-scan> 这一行出现错误显示错误消息为:Pointcut is malformed: error at ::0 formal unbound in  我在配置Aspect中使这样的@Before("execution(public int com.test.spring.aop.impl.ArithmeticCalaculator.add(int,int))") 不知道哪里出错了。求大神击破!
关于Spring实现aop中的xml
首先感谢各位高手在百忙之中点开小弟的帖子, 小弟刚刚涉足aop,遇到一问题, 在用Spring实现aop, 配置文件里面写了这样一句 <property name="target" ref="MyServiceTarget" /> 老师讲的时候说的是,配置目标对象, 照这么说 是把一个目标类的对象配置给ProxyBeanFactory一个属性 可我打开ProxyBeanFactory.class这个类,并未发现有target这样的属性啊 等待高手解惑……
spring mvc aop获取controller中的方法中的参数名称
//配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点 //"execution(* com.nong.aop.*.controller..*.*(..))" /*@Pointcut("execution(* com.nong.aop.*.controller.*(..))") public void aspect(){} // 配置前置通知,使用在方法aspect()上注册的切入点 //同时接受JoinPoint切入点对象,可以没有该参数 @Before(value="aspect()",argNames="prames") public void before(JoinPoint joinPoint){ }
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
前后端分离后,维护接口文档基本上是必不可少的工作。 一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了。当然这是一种非常理想的状态,实际开发中却很少遇到这样的情况,接口总是在不断的变化之中,有变化就要去维护,做过的小伙伴都知道这件事有多么头大!还好,有一些工具可以减轻我们的工作量,Swagger2 就是其中之一,至于其他类似功能但是却收费的软...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
天天学JAVA-JAVA基础(6)
如果觉得我写的还行,请关注我的博客并且点个赞哟。本文主要介绍JAVA 中最常使用字符串常量String相关知识。 1.String简介 2.创建字符串对象两种方式的区别 3.String常用的方法 4.String的不可变性 5.一道阿里面试题,你会做吗? 1.String简介 1.1String源码 首先看一段String源码,String主要实现了Serializable、Compar...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
2020 网络课 智慧树自动刷课代码,自动跳转,自动答题并关闭弹窗,自动1.5倍速静音
刷课一时爽,一直刷课一直爽! 终于让我找到了这个黑客代码了,教程开始: 只限谷歌浏览器和火狐浏览器使用,如果第一次失败,请重新试一下次 将下面代码复制后,进入浏览器按F12键,先点击console 然后Ctrl+v复制代码 最后按回车键即可 var ti = $("body"); var video = $(".catalogue_ul1 li[id*=video-]"); var i = 1;...
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
羞,Java 字符串拼接竟然有这么多姿势
二哥,我今年大二,看你分享的《阿里巴巴 Java 开发手册》上有一段内容说:“循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作符。”到底为什么啊,我平常一直就用的‘+’号操作符啊!二哥有空的时候能否写一篇文章分析一下呢? 就在昨天,一位叫小菜的读者微信我说了上面这段话。 我当时看到这条微信的第一感觉是:小菜你也太菜了吧,这都不知道为啥啊!我估...
写1行代码影响1000000000人,这是个什么项目?
不带钱不带卡,只带手机出门就能畅行无阻,这已是生活的常态。益普索发布的《2019第一季度第三方移动支付用户研究》报告显示,移动支付在手机网民中的渗透率高达95.1%,截至今年1月,支付宝全球用户数已经突破10亿。你或许每天都会打开支付宝,付款购物、领取权益、享受服务……但你或许不知道的是,在这个方便、快捷、智能化的APP背后,有一群年轻的技术人,用智慧和创新让它每天都变得更“聪明”一点。 ...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
一点一滴记录 Java 8 stream 的使用
日常用到,一点一滴记录,不断丰富,知识积累,塑造自身价值。欢迎收藏 String 转 List String str = 1,2,3,4; List&lt;Long&gt; lists = Arrays.stream(str.split(",")).map(s -&gt; Long.parseLong(s.trim())).collect(Collectors.toList()); Lis...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问