这段代码我是直接写在Controller上面得,但是我想改为写在Service上请问应该怎么改呢
 //查询
    @ApiOperation(value="船东发布展示信息列表", notes="船东发布展示信息列表的接口")
    @RequestMapping(value = "/findContent" , method = RequestMethod.POST)
    @ApiImplicitParams({
            @ApiImplicitParam(name="startDate", value="开始时间", required=false),
            @ApiImplicitParam(name="endDate", value="结束时间", required=false),
            @ApiImplicitParam(name="startLoading", value="最小吨数", required=false),
            @ApiImplicitParam(name="endLoading", value="最大吨数", required=false),
            @ApiImplicitParam(name="typeShip", value="船舶类型", required=false),
            @ApiImplicitParam(name="emptyPort", value="港口", required=false)
    })
    public SysResult find(Date startDate,Date endDate , String startLoading , String endLoading,
                             Long typeShip , Long emptyPort){
        try{
            EntityWrapper<ShipRelease> wrapper = new EntityWrapper<>();
            //只能状态为发布中的数据展示出来
            wrapper.where( "state = {0}  ", 4 );
            //筛选时间日期
            if(startDate != null && endDate != null) {
                wrapper.where( "empty_date >= {0}  ", startDate );
                wrapper.and( " empty_date <= {0}", endDate );
            }
            //筛选两数值之剑
            if(startLoading != null && endLoading != null) {
            wrapper.where( "tonnage_loading >= {0}  ", startLoading );
            wrapper.and( " tonnage_loading <= {0}", endLoading );
            }
            //筛选类型1
            if(typeShip != null) wrapper.where("type_ship={0}", typeShip);
            //筛选类型2
            if(emptyPort != null) wrapper.where("empty_port={0}", emptyPort);
            wrapper.setSqlSelect("id, title,empty_date,aircraft_sky,tonnage_loading,type_ship");
            List<ShipRelease> shipReleaseList =  webShipownerReleaseShowMapper.selectList( wrapper );
            return SysResult.ok(shipReleaseList);
        }catch (Exception e){
            e.printStackTrace();
            return SysResult.build(201,"查询失败");
        }
    }

使用得是spring-boot+mybatisPlus

4个回答

方法重写之后,之后解决了这个问题

public SysResult find(Date startDate,Date endDate , String startLoading , String endLoading,
Long typeShip , Long emptyPort){
try{
EntityWrapper wrapper = new EntityWrapper<>();
//只能状态为发布中的数据展示出来
wrapper.where( "state = {0} ", 4 );
//筛选时间日期
if(startDate != null && endDate != null) {
wrapper.where( "empty_date >= {0} ", startDate );
wrapper.and( " empty_date <= {0}", endDate );
}
//筛选两数值之剑
if(startLoading != null && endLoading != null) {
wrapper.where( "tonnage_loading >= {0} ", startLoading );
wrapper.and( " tonnage_loading <= {0}", endLoading );
}
//筛选类型1
if(typeShip != null) wrapper.where("type_ship={0}", typeShip);
//筛选类型2
if(emptyPort != null) wrapper.where("empty_port={0}", emptyPort);
wrapper.setSqlSelect("id, title,empty_date,aircraft_sky,tonnage_loading,type_ship");
List shipReleaseList = webShipownerReleaseShowMapper.selectList( wrapper );
return SysResult.ok(shipReleaseList);
}catch (Exception e){
e.printStackTrace();
return SysResult.build(201,"查询失败");
}
把这个代码放在service里

把wrapper对应的包也放进去

q2617426
无感五 回复幸福的七种颜色: 解决不了空指针异常问题,我service应该如何处理数据为空的问题
11 个月之前 回复
q2617426
无感五 回复幸福的七种颜色: 如果这样写的话会抛空指针异常的
11 个月之前 回复
u014085502
如风似我 现在解决了吗
11 个月之前 回复

如果挪动到Service中定义,那么find方法的每个参数都应该进行判空处理。
其次,这个webShipownerReleaseShowMapper变量是在哪里定义的,有没有可能是空指针?
最后,空指针应该是很容易定位的,看到异常的那行的代码是对那个对象进行的.操作。

将find方法的代码整体搬迁到Service中,然后在Controller中,调用这个Service的find就行了

sinat_30356443
云锦の 回复无感五: @ApiImplicitParam的required属性应该是可以限制是否必入和为空的,而内部变量就自己用代码检测null值,应该可以减少一部分代码
11 个月之前 回复
q2617426
无感五 回复云锦の: 如果写在service上的话,就会抛空指针异常,因为我controller,会有可能转null值到Service上
11 个月之前 回复
sinat_30356443
云锦の 不知道你是那个传参导致不能放到Service中,find的入参都是java自带类型,肯定可以传的,其他的内部变量类型,应该也是可以跨包使用的,有更多的不能正常使用说明或者日志吗
11 个月之前 回复
q2617426
无感五 这个方法我在Service上因为传参问题所以不能正常使用,所以才弄到Controller上的
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Asp.net core identityServer4 回调跳转到signin-oidc得到404 Not Found的问题
我采用IdentityServer4[示例代码(Combined_AspId_and_EFStorage)](https://github.com/IdentityServer/IdentityServer4.Samples/tree/master/Quickstarts/Combined_AspId_and_EFStorage "") ,并参考了晓晨的博客([IdentityServer4(10)- 添加对外部认证的支持之QQ登录)](https://www.cnblogs.com/stulzq/p/7879101.html "")。 在第三方登录时开始都没问题,能够跳转到QQ授权页面并成功返回QQ用户信息,但是在跳转回MvcClient时却得到404空白页面: ## **404 Not Found** identity服务器的startup.cs代码如下: ``` public void ConfigureServices(IServiceCollection services) { Services = services; var connectionString = Configuration.GetConnectionString("qcloud-postgres-applicationdb"); var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name; services.AddDbContext<ApplicationDbContext>(options => options.UseNpgsql(connectionString)); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2); services.Configure<IISOptions>(iis => { iis.AuthenticationDisplayName = "Windows"; iis.AutomaticAuthentication = false; }); var builder = services.AddIdentityServer(options => { options.Events.RaiseErrorEvents = true; options.Events.RaiseInformationEvents = true; options.Events.RaiseFailureEvents = true; options.Events.RaiseSuccessEvents = true; }) // this adds the config data from DB (clients, resources) .AddConfigurationStore(options => { options.ConfigureDbContext = b => b.UseNpgsql(Configuration.GetConnectionString("qcloud-postgres-configurationdb"), sql => sql.MigrationsAssembly(migrationsAssembly)); }) // this adds the operational data from DB (codes, tokens, consents) .AddOperationalStore(options => { options.ConfigureDbContext = b => b.UseNpgsql(Configuration.GetConnectionString("qcloud-postgres-persistedgrantdb"), sql => sql.MigrationsAssembly(migrationsAssembly)); // this enables automatic token cleanup. this is optional. options.EnableTokenCleanup = true; options.TokenCleanupInterval = 60; }) .AddAspNetIdentity<ApplicationUser>(); builder.AddDeveloperSigningCredential(); /* if (Environment.IsDevelopment()) { builder.AddDeveloperSigningCredential(); } else { throw new Exception("need to configure key material"); }*/ services.AddAuthentication( options => { options.DefaultScheme = "QQ"; }) .AddQQ(qqOptions => { qqOptions.AppId = "AppId123456"; // qqOptions.AppKey = "AppKey1234567890"; }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { if (Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); //app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseIdentityServer(); app.UseMvcWithDefaultRoute(); } ``` MvcClient端的startup.cs代码如下: ``` public void ConfigureServices(IServiceCollection services) { Services = services; Services.AddMvc(); JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); Services.AddAuthentication(options => { options.DefaultScheme = "Cookies"; options.DefaultChallengeScheme = "oidc"; }) .AddCookie("Cookies") .AddOpenIdConnect("oidc", options => { options.SignInScheme = "Cookies"; //options.Authority = "http://localhost:5000"; options.Authority = "https://identity.web123456.cn"; options.RequireHttpsMetadata = false; options.ClientId = "yingyu88"; options.ClientSecret = "secret"; options.ResponseType = "code id_token"; options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; options.Scope.Add("yingyu88api"); //options.Scope.Add("offline_access"); //options.ClaimActions.MapJsonKey("website", "website"); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); //app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseAuthentication(); app.UseStaticFiles(); app.UseMvcWithDefaultRoute(); } ``` 客户端得到的log如下: ``` 2019-03-23 11:36:07.588 +08:00 [INF] User profile not available. Using 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeys\S-1-5-82-1592072215-1740167268-757123690-3585059337-856257778\DataProtection' as key repository and Windows DPAPI to encrypt keys at rest. 2019-03-23 11:36:08.070 +08:00 [INF] Request starting HTTP/1.0 GET http://www.yingyu88.cn/Home/Secure 2019-03-23 11:36:08.187 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (Yingyu88web) 2019-03-23 11:36:08.197 +08:00 [INF] Authorization failed. 2019-03-23 11:36:08.202 +08:00 [INF] Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'. 2019-03-23 11:36:08.209 +08:00 [INF] Executing ChallengeResult with authentication schemes ([]). 2019-03-23 11:36:08.713 +08:00 [INF] AuthenticationScheme: oidc was challenged. 2019-03-23 11:36:08.722 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (Yingyu88web) in 531.87060000000008ms 2019-03-23 11:36:08.742 +08:00 [INF] Request finished in 673.8004ms 302 2019-03-23 11:36:15.048 +08:00 [INF] Request starting HTTP/1.0 POST http://www.yingyu88.cn/signin-oidc application/x-www-form-urlencoded 1532 2019-03-23 11:36:15.418 +08:00 [INF] AuthenticationScheme: Cookies signed in. 2019-03-23 11:36:15.419 +08:00 [INF] Request finished in 370.649ms 302 ``` 从以上Log可以看出Signin是成功的,但是callback回到signin-oidc之后请求就结束了,诡异的是应用并没有报错。 如有哪位大神熟悉IdentityServer的请多多赐教! 如果需要我这边更多的代码和log信息可以加QQ:352862120联系我私聊。多谢! 2019-03-29更新: ---- 经过试验发现,IdentityServer4的示例代码在调试状态下没有问题,能够在localhost:5000和localhost:5002之间跳转并传递相应的Cookies。但是部署到服务器后(我用的是windows 2016和iis)就不行了(代码完全一致)。最初直接想到的是跨域问题,但是加上AddCors也并没有解决。 ``` public void ConfigureServices(IServiceCollection services) { //配置跨域处理,允许所有来源: services.AddCors(options => options.AddPolicy("corspolicy", p => p.AllowAnyOrigin()) ); } public void Configure(IApplicationBuilder app) { if (Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseIdentityServer(); ** app.UseCors("corspolicy"); ** app.UseMvcWithDefaultRoute(); } ``` 以上代码加到了IdentityServer和MvcClient,但是并没有效果。 追踪部署环境和调试环境下的log可以发现,公网部署时IdentityServer运行到signin-oidc就停止了,没有任何报错。 这是公网部署时的log: ``` 2019-03-25 13:46:19.030 +08:00 [INF] Request starting HTTP/1.0 GET http://www.yingyu88.cn/Home/Secure 2019-03-25 13:46:19.031 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (MvcClient) 2019-03-25 13:46:19.039 +08:00 [INF] Authorization failed. 2019-03-25 13:46:19.041 +08:00 [INF] Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'. 2019-03-25 13:46:19.045 +08:00 [INF] Executing ChallengeResult with authentication schemes ([]). 2019-03-25 13:46:19.403 +08:00 [INF] AuthenticationScheme: oidc was challenged. 2019-03-25 13:46:19.408 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (MvcClient) in 376.51370000000003ms 2019-03-25 13:46:19.413 +08:00 [INF] Request finished in 382.7936ms 302 2019-03-25 13:46:40.244 +08:00 [INF] Request starting HTTP/1.0 POST http://www.yingyu88.cn/signin-oidc application/x-www-form-urlencoded 1531 2019-03-25 13:46:40.651 +08:00 [INF] AuthenticationScheme: Cookies signed in. 2019-03-25 13:46:40.651 +08:00 [INF] Request finished in 406.993ms 302 ``` 这是调试环境下的log: ``` 2019-03-25 12:32:15.062 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:5002/Home/Secure 2019-03-25 12:32:15.064 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (MvcClient) 2019-03-25 12:32:15.070 +08:00 [INF] Authorization failed. 2019-03-25 12:32:15.072 +08:00 [INF] Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'. 2019-03-25 12:32:15.073 +08:00 [INF] Executing ChallengeResult with authentication schemes ([]). 2019-03-25 12:32:15.077 +08:00 [INF] AuthenticationScheme: oidc was challenged. 2019-03-25 12:32:15.077 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (MvcClient) in 13.078700000000001ms 2019-03-25 12:32:15.077 +08:00 [INF] Request finished in 14.6766ms 302 2019-03-25 12:32:39.168 +08:00 [INF] Request starting HTTP/1.1 POST http://localhost:5002/signin-oidc application/x-www-form-urlencoded 1522 2019-03-25 12:32:39.543 +08:00 [INF] AuthenticationScheme: Cookies signed in. 2019-03-25 12:32:39.543 +08:00 [INF] Request finished in 375.4138ms 302 //以下是调试环境下继续执行跳转回/home/secure的动作。部署后这些动作就没有被执行。 2019-03-25 12:32:39.550 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:5002/Home/Secure 2019-03-25 12:32:39.551 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (MvcClient) 2019-03-25 12:32:39.551 +08:00 [INF] Authorization was successful. 2019-03-25 12:32:39.551 +08:00 [INF] Executing action method MvcClient.Controllers.HomeController.Secure (MvcClient) - Validation state: "Valid" 2019-03-25 12:32:39.552 +08:00 [INF] Executed action method MvcClient.Controllers.HomeController.Secure (MvcClient), returned result Microsoft.AspNetCore.Mvc.ViewResult in 0.2637ms. 2019-03-25 12:32:39.556 +08:00 [INF] Executing ViewResult, running view Secure. 2019-03-25 12:32:39.562 +08:00 [INF] Executed ViewResult - view Secure executed in 10.0428ms. 2019-03-25 12:32:39.563 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (MvcClient) in 11.7323ms 2019-03-25 12:32:39.565 +08:00 [INF] Request finished in 14.3843ms 200 text/html; charset=utf-8 ``` 观察对比两种环境下的cookie,发现部署后从IdentityServer跳转到MvcClient/signin-oidc后少了两个cookie: .AspNetCore.Identity.Application idsrv.session ---- 从IdentityServer4官方的示例代码来看,其示例代码可能还无法直接应用于部署环境,在startup.cs中有一段代码: ``` if (Environment.IsDevelopment()) { builder.AddDeveloperSigningCredential(); } else { throw new Exception("need to configure key material"); } ``` 由此可见sigin-oidc的404问题有可能是解密凭据引起的。但是我对ASP.net core源码了解太少,提供上述信息希望能够得到大神的指点。 2019-03-29更新:AddDeveloperSigningCredential会生成RSA加密证书,使得程序能够正常运行,虽然其安全性会比较差。详见[IdentityServer4部署到服务器,配置证书问题](https://www.jianshu.com/p/1b82f6d2644e "")。因此AddDeveloperSigningCredential并非导致本次问题的原因。 ---- 2019-03-26更新: 如果把IdentityServer4.Samples\Quickstarts\4_ImplicitFlowAuthenticationWithExternal示例部署到同样的环境,发现能够运行通过。但是如果改为Hybrid模式就会出现signin-oidc 404 Not Found的问题。 identityserver.config.cs代码: ``` // OpenID Connect hybrid flow client (MVC) new Client { ClientId = "mvc", ClientName = "MVC Client", // 能正常部署运行: AllowedGrantTypes = GrantTypes.Implicit, // 会出现404问题: AllowedGrantTypes = GrantTypes.Hybrid, ClientSecrets = { new Secret("secret".Sha256()) }, RedirectUris = { "http://www.someweb.cn/signin-oidc" }, PostLogoutRedirectUris = { "http://www.someweb.cn/signout-callback-oidc" }, AllowedScopes = { IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile, "api1" }, AllowOfflineAccess = true } ``` MvcClient.startup.cs: ``` { options.DefaultScheme = "Cookies"; options.DefaultChallengeScheme = "oidc"; }) .AddCookie("Cookies") .AddOpenIdConnect("oidc", options => { options.SignInScheme = "Cookies"; options.Authority = "https://identity.someweb.cn"; options.RequireHttpsMetadata = false; options.ClientId = "mvc"; options.ClientSecret = "secret"; options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; options.Scope.Add("offline_access"); options.ClaimActions.MapJsonKey("website", "website"); // 能够正常部署运行: options.ResponseType = "id_token"; // 会发生signin-oidc 404错误: options.Scope.Add("api1"); options.ResponseType = "code id_token"; // 会发生"invalid_scope" 错误: options.Scope.Add("api1"); options.ResponseType = "id_token"; }); ``` 现在虽然已经知道Hybrid模式下公网部署才会出现错误,但究竟是我对client的配置错误还是IS4的bug所引起的问题并不清楚。 我试过AddCors,但并没有解决以上问题。
建一个简单的MVC结构,为什么用户请求的数据总是会被替换?
在学着用golang开发一个简单的 MVC 结构时,IndexCtrl 继承了 Controller 之后,可以读取它的 Request 和 ResponseWriter 属性值,可是当有另一个请求的时候,上一个请求如果没处理完,这两个属性值也变成新的了。 请问下面这段代码要怎么改才可以在 IndexCtrl 的 GET() 执行时,得到的 Controller 的那两个属性值都是独立的? ``` func main() { var app App app.GET("/", new(IndexCtrl)) app.Run(":8100") } //自定义控制器 type IndexCtrl struct { Controller } func (c *IndexCtrl) GET() { fmt.Println("index") } ``` ``` var Routers []Router type App struct{} type Router struct { path string ctrl ControllerInterface } func (app *App) GET(path string, ctrl ControllerInterface) { r := Router{ path: path, ctrl: ctrl, } Routers = append(Routers, r) } func (app *App) Run(addr string) { fmt.Println("Listen at " + addr) http.ListenAndServe(addr, app) } func (app *App) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Println("假设匹配到第1条路由规则") Routers[0].ctrl.Init(w, r) Routers[0].ctrl.GET() //c.Init(w, r) for { fmt.Println(Routers[0].ctrl) //就在这个地方出了问题,Routers[0].ctrl 中的w和r值总是会被最新请求的w,r值给替换 time.Sleep(time.Second * 2) } } type Controller struct { ResponseWriter http.ResponseWriter Request *http.Request } type ControllerInterface interface { GET() Init(w http.ResponseWriter, r *http.Request) } func (c *Controller) Init(w http.ResponseWriter, r *http.Request) { fmt.Println(c) c.ResponseWriter = w c.Request = r } func (c *Controller) GET() { fmt.Println("基类的GET") } ```
支付宝沙箱测试支付成功后,跳转回调界面return_url报错
【问题描述】支付宝沙箱测试支付成功后,跳转回调界面return_url报错:系统有点儿忙,一会儿再试试。 错误码:SYSTEM_ERROR ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929809_405054.jpg) ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929822_13781.jpg) ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929832_347680.jpg) ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929839_380913.jpg) @Controller @RequestMapping("/Alipay") public class AlipayController { @RequestMapping(value="/goPay", method={RequestMethod.POST}) @ResponseBody public String goPay(ModelMap map, HttpServletRequest request, HttpServletResponse response) throws Exception{ //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url); //商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no =new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //付款金额,必填 String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8"); //订单名称,必填 String subject =new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); //商品描述,可空 String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8"); alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求 String result = alipayClient.pageExecute(alipayRequest).getBody(); return result; } @RequestMapping(value = "/alipayReturnNotice") public ModelAndView alipayReturnNotice(HttpServletRequest request, HttpServletRequest response) throws Exception { System.out.println("支付成功, 进入同步通知接口..."); //获取支付宝GET过来反馈信息 Map<String,String> params = new HashMap<String,String>(); Map<String,String[]> requestParams = request.getParameterMap(); for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //乱码解决,这段代码在出现乱码时使用 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //璋冪敤SDK楠岃瘉绛惧悕 ModelAndView mv = new ModelAndView("alipay/return_url"); if(signVerified) { //商户订单号 String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //支付宝交易号 String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8"); //付款金额 String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8"); // 修改叮当状态,改为 支付成功,已付款; 同时新增支付流水 //寰呮坊鍔爋rderService.updateOrderStatus(out_trade_no, trade_no, total_amount); //Orders order = orderService.getOrderById(out_trade_no); //Product product = productService.getProductById(order.getProductId()); // // log.info("********************** 支付成功(支付宝同步通知) **********************"); // log.info("* 订单号: {}", out_trade_no); // log.info("* 支付宝交易号: {}", trade_no); // log.info("* 实付金额: {}", total_amount); // log.info("* 购买产品: {}", product.getName()); // log.info("***************************************************************"); mv.addObject("out_trade_no", out_trade_no); mv.addObject("trade_no", trade_no); mv.addObject("total_amount", total_amount); mv.addObject("flag", "success"); }else { //log.info("鏀粯, 楠岀澶辫触..."); System.out.println("鏀粯, 楠岀澶辫触..."); } return mv; } }
struts2中处理自定义异常的问题,求大神帮忙
先上代码: struts.xml ``` <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 请求参数的编码方式 --> <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 --> <constant name="struts.configuration.xml.reload" value="true" /> <!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 --> <constant name="struts.serve.static.browserCache" value="false" /> <!-- 将struts2委托Spring管理 --> <constant name="struts.objectFactory" value="spring" /> <!-- 是否开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 --> <constant name="struts.devMode" value="true" /> <!-- 设置默认的父包,一般我们都设置一个default包继承自struts-default。大部分类再继承default。如果有特殊的类需要特殊的包,只能在action中再指定父包了。 --> <constant name="struts.convention.default.parent.package" value="default" /> <!-- 默认配置包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。通过设置struts.convention.package.locators属性来修改这个配置。 --> <constant name="struts.convention.package.locators" value="action,actions,controller,web" /> <!-- 约定Action类名:要求Action的命名必须以Action为后缀,可以使用下面常量来修改后缀限制 --> <constant name="struts.convention.action.suffix" value="Action" /> <package name="default" extends="struts-default"> <global-results> <!-- <result name="error1">/commons/error1.jsp</result> --> <result name="error2">/commons/error2.jsp</result> <result name="login">/login/login.jsp</result> </global-results> <global-exception-mappings> <!-- <exception-mapping result="error1" exception="java.lang.Exception"/> --> **<exception-mapping result="error2" exception="com.lz.shop.web.action.MyException" />** <exception-mapping result="sqlException" exception="java.sql.SQLException" /> </global-exception-mappings> </package> </struts> ``` <exception-mapping result="error2" exception="com.lz.shop.web.action.MyException" /> 这一句为什么会无效呀?试了很多办法都不行 求大神解答! 自定义异常类: MyException.java ``` package com.lz.shop.web.action; public class MyException extends Exception { /** * */ private static final long serialVersionUID = -4567535714727601736L; public MyException() { super(); } private String message="bmddddd"; public MyException(String message) { this.message = message; } public String getMessage() { return message; } } ``` error2.jsp ``` <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>ERROR1</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <span>ERROR2</span> <s:fielderror></s:fielderror> <s:property value="exception.message" /> </body> </html> ``` Action测试类: LoginAction.java ``` package com.lz.shop.web.action; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.lz.shop.entity.base.User; import com.lz.shop.web.BaseSupport; @Scope @Controller @Namespace("/user") @ParentPackage("default") public class LoginAction extends BaseSupport { /** * */ private static final long serialVersionUID = 6336185736252504861L; private User user; /** * 验证登陆 * * @return */ @Action(value = "loginAction", results = { @Result(name = "success", location = "/index.jsp", type = "redirect"), @Result(name = "input", location = "/login/login.jsp") }) public String login() { //抛个空指针异常来测试 if (user.getUsername() == "1" && user.getPassword() == "1") { System.out.println("success"); return "success"; } else { System.out.println("input"); return "input"; } } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } ``` struts2版本是2.2.1 求大神支招!!!
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
阿里P8数据架构师:顶级开发者都在用什么数据库?
其实从去年已经隐隐约约感觉到数据库的有变化,只是没有想到变得这么快。今年的一些事情实实在在地给了某些数据库重击,如果以前去某数据库还是喊喊,然后该用还用,今年从传统领域刮起的去某数据库的风,已经开始了,并且后面的乌云密布也看得见。 最近看一篇国外的开源产品提供厂商的一篇文字,主要是在询问了他的几百位客户后得出了下图中的2019年数据库的使用趋势。 从图中可以看出,MySQL以38.9...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
互联网公司分布式系统架构演进之路
介绍 分布式和集群的概念经常被搞混,现在一句话让你明白两者的区别。 分布式:一个业务拆分成多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上 例如:电商系统可以拆分成商品,订单,用户等子系统。这就是分布式,而为了应对并发,同时部署好几个用户系统,这就是集群 1 单应用架构 2 应用服务器和数据库服务器分离 单机负载越来越来,所以要将应用服务器和数据库服务器分离 3 应用服务...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
程序员需要了解的硬核知识之汇编语言(一)
之前的系列文章从 CPU 和内存方面简单介绍了一下汇编语言,但是还没有系统的了解一下汇编语言,汇编语言作为第二代计算机语言,会用一些容易理解和记忆的字母,单词来代替一个特定的指令,作为高级编程语言的基础,有必要系统的了解一下汇编语言,那么本篇文章希望大家跟我一起来了解一下汇编语言。 汇编语言和本地代码 我们在之前的文章中探讨过,计算机 CPU 只能运行本地代码(机器语言)程序,用 C 语言等高级语...
OpenCV-Python 绘图功能 | 七
目标 学习使用OpenCV绘制不同的几何形状 您将学习以下功能:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等。 代码 在上述所有功能中,您将看到一些常见的参数,如下所示: img:您要绘制形状的图像 color:形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于蓝色。对于灰度,只需传递...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Fiddler+夜神模拟器进行APP抓包
Fiddler+夜神模拟器进行APP抓包 作者:霞落满天 需求:对公司APP进行抓包获取详细的接口信息,这是现在开发必备的。 工具:Fiddler抓包,夜神模拟器 模拟手机 安装APP 1.下载Fiddler https://www.telerik.com/download/fiddler Fiddler正是在这里帮助您记录计算机和Internet之间传递的所有HTTP和HTTPS通信...
小白学 Python 爬虫(42):春节去哪里玩(系列终篇)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(...
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
[数据结构与算法] 排序算法之归并排序与基数排序
归并排序 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 基本思想 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
如何快速打好Java基础?
二哥,我是一名大学生,专业是电力工程,但想自学 Java,如何快速打好基础呢? 微信上 tison 向我提出了这个问题。我想我是有资格来回答的,从北京奥运会那年开始学 Java,到现在已经有 10 多个年头了,真的是从一名编程白痴一步步走到现在的。 我在各大技术网站上分享了不少 Java 方面的原创文章,不知道影响了多少初学者,反正文章的留言中经常能看到他们由衷的感谢。现在每天仍然有不少同学(...
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
Java第二周学习
Java第二周学习 1. 数组 1.1 定义数组格式 数据类型[] 数组名 = new 数据类型[容量]; int[] arr = new int[10]; 赋值左侧 数据类型: 告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类型之后,整个数组中保存的数据类型无法修改!!! []: 告知编译器这里定义的是一个数组类型数据。 明确告知编译器,数组名是一个【引用数据类型...
有没有简单一点的 Python 小例子或小项目?
分享一波Github上适合新手入门、又十分有趣的Python项目~ 1. 人脸识别 star:30.5k 最简洁的人脸识别库。可以使用Python和命令行工具提取、识别、操作人脸。其人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,准确率高达99.38%。 而且有中文版README哟~ 2. faceai sta...
​人工智能如何拦截来自太空的古老电波信号?
全文共1468字,预计学习时长5分钟来源:Pexels人类对宇宙的向往,似乎是基因自带,亘古不变的。科幻小说、电影等艺术题材的昌盛,正说明了这一点。特别是随着科技发展,人类对UFO的...
看完这篇JVM,阿里面试官都不怕!
前言 只有光头才能变强 本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的。能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 (图片来源:https://zhuanlan.zhihu.com/p/25511795,侵删) 声...
Java基础知识面试题(2020最新版)
文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...
Spring面试题(2020最新版)
文章目录Spring概述(10)什么是spring?Spring框架的设计目标,设计理念,和核心是什么Spring的优缺点是什么?Spring有哪些应用场景Spring由哪些模块组成?Spring 框架中都用到了哪些设计模式?详细讲解一下核心容器(spring context应用上下文) 模块Spring框架中有哪些不同类型的事件Spring 应用程序有哪些不同组件?使用 Spring 有哪些方式...
用树莓派做一个人脸识别开锁应用
作者:eckygao,腾讯 CSIG 云产品部1.案例概述1.1 背景实现一个人脸识别进行开锁的功能,用在他的真人实景游戏业务中。总的来说,需求描述简单,但由于约束比较多,在架构与选型上...
C语言写个贪吃蛇游戏
贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情。这个游戏我写完后放在知乎,竟然点赞的人数超级多。我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强...
出不了门的日子,我选择在 GitHub 上快乐的打游戏
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个在家憋到长蘑菇的蒟蒻… 2020 年的开年因为一些大家都知道的原因,有些不顺,但还是要捏捏自己的脸蛋儿,微笑的面对,毕竟日子还是要过下去… 要点脸皮,不能出门,假期又一延再延,作为一个从小熟读结发悬梁铁锥刺骨囊萤照读牛角挂书等典故的社会主义好青年,我决定趁这段时间好好充实自己,争取早日上...
鹅厂程序员在家撸码的十大姿势
大家好,我是帅气的他二哥,好久不见~在家办公已经一周多了,不知各位感觉如何?曾经的你以为在家办公爽歪歪,今天的你迫不及待想回公司上班电脑屏幕太小,椅子不舒服,网络不好,没有下班时间,被娃...
新年新气象,接个私活赚点生活费?说说这里的弯弯绕
现在到处讲副业,怎么样利用副业赚钱,这能理解,一方面年轻人生存压力大,多赚钱点总是没有坏处;另一方面,每年的裁员信息看的人心惊胆颤,大家都想为自己留一条后路。 新年伊始,想必很多小伙伴可能都想大展拳脚,新的一年好好干一番,很多人就想到了接私活,但是接私活到底赚不赚钱,这里有哪些坑,松哥和大家扯扯。 松哥刚毕业的时候做 Android 开发,在做 Android 期间基本上没有接过私活,因为 And...
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问