我最近接受过采访,面试官希望我做一个技术测试,看看我的知识.在我完成它之后,他给了我关于我是如何做到这一点的反馈,这是我没想到的,我很感激,因为如果他们不想雇用你,很少有采访者这样做.
他告诉我他告诉我他的代码不好的一件事是我在我编写的每个方法中使用了多个try-catch块.这引起了我的注意,因为我觉得它很有趣.
我相信目前我应该创建try-catch块,其中有一个语义可区分的代码块,它有一个或多个方法可以抛出需要捕获的异常.我遵循的唯一例外是,如果两个方法抛出相同的异常类型,我最好将它们放在不同的try-catch块中,以清楚地区分调试抛出异常的位置和原因.
这与采访者希望我做的完全不同.那么每种方法只使用一个try-catch块是一种已知的良好实践吗?如果这是一个众所周知的良好做法,这样做有什么好处?
编辑:我非常感谢您对此的看法,这非常好.虽然请注意我在问这是否是一个已知的良好做法.这是,如果大多数程序员都同意这一点,或者这是一本书中的好习惯
我正在阅读java中的匿名类,它说你可以访问封闭类的方法,但不能访问局部变量.为什么会这样?我在说这个:
编辑:旧的例子是错误的不反映我的意思.这应该是一个更好的例子,根据它在"访问封闭类的成员"部分http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html中所写的内容.
public class MyClass {
public interface SomeInterface{
public void someOtherMethod();
}
public void someMethod(int someLocalVar) {
SomeInterface myClass = new SomeInterface(){
public void someOtherMethod(){
someLocalVar = 0; // This must be final to work
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么这个限制解决有什么问题呢?
我正在尝试为OkHttp设置缓存,所以它只在第一次尝试从服务器检索响应时才向服务器请求,直到过期标头日期,或者来自服务器的缓存控制标头使响应无效从缓存.
目前,它缓存响应,但在再次请求资源时不使用它.可能这不是应该使用的方式.
我正在使用这样的缓存设置OkHttpClient:
public static Cache createHttpClientCache(Context context) {
try {
File cacheDir = context.getDir("service_api_cache", Context.MODE_PRIVATE);
return new Cache(cacheDir, HTTP_CACHE_SIZE);
} catch (IOException e) {
Log.e(TAG, "Couldn't create http cache because of IO problem.", e);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是这样使用的:
if(cache == null) {
cache = createHttpClientCache(context);
}
sClient.setCache(cache);
Run Code Online (Sandbox Code Playgroud)
这就是我用OkHttp向服务器发出的一个请求,它实际上没有使用缓存:
public static JSONObject getApi(Context context)
throws IOException, JSONException, InvalidCookie {
HttpCookie sessionCookie = getServerSession(context);
if(sessionCookie == null){
throw new InvalidCookie();
}
String cookieStr = sessionCookie.getName()+"="+sessionCookie.getValue();
Request request = new Request.Builder() …
Run Code Online (Sandbox Code Playgroud) 我知道有很多关于均衡器的问题,但是我没有得到我想要的东西.我想要做的是一个均衡器,用于修改音频样本,如:
equalizer.eqAudio(audiosamples, band, gain)
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是我想要的确切接口,因为我在实现它们方面对DSP知之甚少(我使用过滤器,限制器,压缩器但没有制造它们).
所以谷歌搜索我读到我必须对样本进行FFT,这样我得到每个频率范围的数据而不是幅度,按照我想要的方式处理它,然后进行FFT的反转,这样我再次得到音频样本的结果.我寻找了这个FFT的实现,并找到了JTransform for Java.该库具有称为离散余弦变换(DCT)的FFT相关算法的实现.
我的问题是:
谢谢!
我仍然使用 ndk-gdb,现在试图解决导致我做我自己回答的其他问题的主要问题 xD
ndk-gdb 告诉我当前的库没有符号表。这就像我正在调试的文件与模拟器正在执行的文件不同。但我重新上传了该应用程序。它还说“使用文件命令”,但文件仅在我调试本地程序时才有效,对吧?它不适合当我像使用 android 那样进行远程调试时。
所以我该怎么做?我三天以来一直在寻找解决方案,但我仍然一无所知。也许我应该问除了错误的文件问题之外,此消息的其他原因是什么?
谢谢。一些信息: ndk-build 和 ndk-gdb 在项目的父目录中调用。Android API 级别 10 (2.3.3) Android NDK R7B
Android.mk文件内容:
MY_LOCAL_PATH := $(call my-dir)
LOCAL_PATH := $(MY_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := wrapper
LOCAL_SRC_FILES := wrapper.c \
aes.c \
password.c \
sha256.c \
aescrypt.c
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud) 我正在玩这个在视图变为活动状态时触发的ionicView事件,并且我正在使用您可以在创建项目时重复使用的侧边菜单模板.似乎如果我在AppCtrl中放置一个$ ionicView.entered事件的监听器(侧面菜单模板使用的那个,它属于ui-router配置中的抽象状态),它会连续两次调用子视图(例如,当使用app.someotherview作为状态时).
我不知道这是否是预期的行为,因为无论我是否更改子视图(menuContent视图),我都希望它只会触发一次.
我想知道这是否是预期的行为,如果是这样的话,我怎样才能在每次显示侧面菜单模板时触发一次事件.
这就是我写的:
这是来自应用程序模块:
.config(function($stateProvider, $urlRouterProvider, $httpProvider) {
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl'
})
.state('app.overview', {
url: "/overview",
views: {
'menuContent': {
templateUrl: "templates/overview.html",
controller: 'OverviewCtrl'
}
}
})
.state('login', {
url: "/login",
templateUrl: "templates/identificationscreen.html",
controller: "IdentificationCtrl"
})
.state('app.agenda', {
url: "/agenda",
views: {
'menuContent': {
templateUrl: "templates/agenda.html",
controller: 'AgendaCtrl'
}
}
});
$httpProvider.interceptors.push('credentialsInjector');
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/login');
Run Code Online (Sandbox Code Playgroud)
然后AppCtrl是这样的:
angular.module('dashboard.controllers.app', []) …
Run Code Online (Sandbox Code Playgroud) 我正在考虑这个问题:例如,编写宏来创建函数,变量或来自不使用命名约定的第三方库的任何其他元素的别名是否常见?如果是,那么最好的方法是什么,只需编写宏?
我最近开始用C++编写代码,但我很长时间用C语言编写.所以我正在从fstream类中读取方法,并且我已经发现每个可能是一个过程的方法(什么都不返回)都返回一个引用到调用其方法的对象.(例如,fstream&fstream :: read(char_type*__s,streamsize __n)).
为什么这样做?
我在fstream类的顶部编写了一个小层,所以我想知道我是否应该在读取方法中返回一个引用.
谢谢.
编辑:在我的代码版本中,aList被引用为指针,但在我当前的版本中仍然存在同样的问题.
在尝试将其拆分为接口文件和实现文件之前,我已完全使用此代码.但是当我拆分它时,编译器告诉我我用不正确的参数调用push_back().所以我理解它不能引用我推动它的对象的类型,虽然它是相同的(afaik,当然:D).
#ifndef _MYHEADER_HPP_
#define _MYHEADER_HPP_
class A{
public:
std::string someString;
};
class B{
public:
std::vector<A> aList;
public:
void addA();
};
#endif /* _MYHEADER_HPP_ */
//implementation file
#include <string>
#include <vector>
#include "myheader.hpp"
void B::addA(){
A a;
a.someString = "Hola";
// Here compiler says : Invalid arguments 'Candidates are: void push_back(const A &)' line 18 Semantic Error
aList.push_back(a);
}
Run Code Online (Sandbox Code Playgroud)
AFAIK,std :: vector总是执行要推送的对象的副本,并且该副本存储到向量中,所以我认为这不是"a"被分配的问题,我是对的吗?
我做错了什么?谢谢.